Skip to content

Commit 76dfd84

Browse files
WIP: Auto complete now works like hover-help
1 parent bdbfb5d commit 76dfd84

57 files changed

Lines changed: 353 additions & 324 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ Fixed a bug where we were incorrectly detecting standalone expressions and repor
3939

4040
Fixed a parsing issue where we would not correctly determine the end of ternary operators which could report errors incorrectly in your code.
4141

42+
Re-worked auto-complete to function the same way as hover help. Now, we determine types of features to send from one of our worker threads and then the main thread builds out the completion items. The advantage of this is that we can now send back documentation and other information (which doesn't exist in our worker threads).
43+
4244
## 4.6.0 - August 2024
4345

4446
Fixed an issue where we open a file that we have stopped in, even if it is compiled as a SAVE file. Now, only PRO files will be jumped to.

apps/parsing-worker/src/main.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { PrepareNotebookCell } from '@idl/notebooks/idl-index';
55
import { ParseFileSync } from '@idl/parser';
66
import {
77
ChangeDetection,
8+
GetCompletionRecipes,
89
GetHoverHelpLookup,
910
GetSyntaxProblems,
1011
IDL_INDEX_OPTIONS,
@@ -131,6 +132,21 @@ client.on(LSP_WORKER_THREAD_MESSAGE_LOOKUP.TRACK_GLOBAL, async (message) => {
131132
}
132133
});
133134

135+
/**
136+
* Handle requests to parse and post process code for a file
137+
*/
138+
client.on(
139+
LSP_WORKER_THREAD_MESSAGE_LOOKUP.AUTO_COMPLETE_RECIPE,
140+
async (message, cancel) => {
141+
return GetCompletionRecipes(
142+
WORKER_INDEX,
143+
message.file,
144+
message.code,
145+
message.position
146+
);
147+
}
148+
);
149+
134150
/**
135151
* Handle change detection
136152
*/

libs/parsing/index/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from './lib/auto-complete/get-completion-recipes';
12
export * from './lib/change-detection/change-detection';
23
export * from './lib/global-index.class';
34
export * from './lib/global-index.interface';

libs/parsing/index/src/lib/auto-complete/build-completion-items.interface.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { FormatterType, IAssemblerOptions } from '@idl/assembling/config';
2-
import { CompletionItem } from 'vscode-languageserver';
3-
4-
import { IDLIndex } from '../idl-index.class';
52
import {
63
AutoCompleteRecipeOptions,
74
AutoCompleteType,
8-
} from './auto-complete-recipe.interface';
5+
} from '@idl/types/auto-complete';
6+
import { CompletionItem } from 'vscode-languageserver';
7+
8+
import { IDLIndex } from '../idl-index.class';
99
import { BuildCompileOptCompletionItems } from './completion-for/completion-compile-opts';
1010
import { BuildExecutiveCommandCompletionItems } from './completion-for/completion-executive-commands';
1111
import { BuildFunctionMethodCompletionItems } from './completion-for/completion-function-methods';

libs/parsing/index/src/lib/auto-complete/build-completion-items.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import { FormatterType, IAssemblerOptions } from '@idl/assembling/config';
2+
import { AutoCompleteRecipe, AutoCompleteType } from '@idl/types/auto-complete';
23
import { IDLExtensionConfig } from '@idl/vscode/extension-config';
34
import { CompletionItem, MarkupKind } from 'vscode-languageserver';
45

56
import { ResolveHoverHelpLinks } from '../helpers/resolve-hover-help-links';
67
import { IDLIndex } from '../idl-index.class';
7-
import {
8-
AutoCompleteRecipe,
9-
AutoCompleteType,
10-
} from './auto-complete-recipe.interface';
118
import { ALL_COMPLETION_ITEM_BUILDERS } from './build-completion-items.interface';
129

1310
/**
@@ -16,8 +13,8 @@ import { ALL_COMPLETION_ITEM_BUILDERS } from './build-completion-items.interface
1613
export function BuildCompletionItems(
1714
index: IDLIndex,
1815
recipes: AutoCompleteRecipe<AutoCompleteType>[],
19-
formatting: IAssemblerOptions<FormatterType>,
20-
config: IDLExtensionConfig
16+
config: IDLExtensionConfig,
17+
formatting: IAssemblerOptions<FormatterType>
2118
) {
2219
/** initial list of completion items */
2320
const complete: CompletionItem[] = [];

libs/parsing/index/src/lib/auto-complete/completion-for/completion-compile-opts.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import { AdjustCase } from '@idl/assembling/shared';
22
import { TreeToken } from '@idl/parsing/syntax-tree';
33
import { ALLOWED_COMPILE_OPTIONS } from '@idl/parsing/syntax-validators';
44
import { ControlCompileOptToken, TOKEN_NAMES } from '@idl/tokenizer';
5+
import {
6+
CompileOptCompletion,
7+
ICompileOptCompletionOptions,
8+
} from '@idl/types/auto-complete';
59
import { CompletionItemKind } from 'vscode-languageserver';
610

711
import { BuildCompletionItemsArg } from '../build-completion-items.interface';
812
import { SORT_PRIORITY } from '../sort-priority.interface';
9-
import {
10-
CompileOptCompletion,
11-
ICompileOptCompletionOptions,
12-
} from './completion-compile-opts.interface';
1313

1414
/**
1515
* Generates options for creating compile opts

libs/parsing/index/src/lib/auto-complete/completion-for/completion-executive-commands.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ import { AdjustCase } from '@idl/assembling/shared';
22
import { TreeToken } from '@idl/parsing/syntax-tree';
33
import { IDLFileHelper } from '@idl/shared';
44
import { TokenName } from '@idl/tokenizer';
5+
import {
6+
ExecutiveCommandCompletion,
7+
IExecutiveCommandCompletionOptions,
8+
} from '@idl/types/auto-complete';
59
import { basename } from 'path';
610
import { CompletionItemKind } from 'vscode-languageserver';
711

812
import { BuildCompletionItemsArg } from '../build-completion-items.interface';
913
import { SORT_PRIORITY } from '../sort-priority.interface';
10-
import {
11-
ExecutiveCommandCompletion,
12-
IExecutiveCommandCompletionOptions,
13-
} from './completion-executive-commands.interface';
1414

1515
/**
1616
* All executive commands

libs/parsing/index/src/lib/auto-complete/completion-for/completion-function-methods.interface.ts

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,7 @@
1-
import { IDLDataType } from '@idl/types/core';
1+
import { FunctionMethodCompletion } from '@idl/types/auto-complete';
22

33
import { BuildCompletionItemsArg } from '../build-completion-items.interface';
44

5-
/**
6-
* Auto-complete for function methods
7-
*/
8-
export type FunctionMethodCompletion = 'function-method';
9-
10-
/**
11-
* Options for adding function method completion
12-
*/
13-
export interface IFunctionMethodCompletionOptions {
14-
/**
15-
* Do we add parentheses or not
16-
*/
17-
addParen: boolean;
18-
/**
19-
* Data type to add types for
20-
*/
21-
type: IDLDataType;
22-
}
23-
245
export interface IFunctionMethodCompletionArg
256
extends BuildCompletionItemsArg<FunctionMethodCompletion> {
267
/** Current methods that we have found */

libs/parsing/index/src/lib/auto-complete/completion-for/completion-function-methods.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { TransformCase } from '@idl/assembling/shared';
22
import { IDL_DISPLAY_NAMES } from '@idl/parsing/routines';
33
import { IDL_TRANSLATION } from '@idl/translation';
4+
import { IFunctionMethodCompletionOptions } from '@idl/types/auto-complete';
45
import {
56
GLOBAL_TOKEN_TYPES,
67
IDL_TYPE_LOOKUP,
@@ -12,10 +13,7 @@ import {
1213
import { Command, CompletionItemKind } from 'vscode-languageserver';
1314

1415
import { SORT_PRIORITY } from '../sort-priority.interface';
15-
import {
16-
IFunctionMethodCompletionArg,
17-
IFunctionMethodCompletionOptions,
18-
} from './completion-function-methods.interface';
16+
import { IFunctionMethodCompletionArg } from './completion-function-methods.interface';
1917

2018
/**
2119
* Display names for function methods

libs/parsing/index/src/lib/auto-complete/completion-for/completion-functions.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import { TransformCase } from '@idl/assembling/shared';
33
import { IDL_DISPLAY_NAMES } from '@idl/parsing/routines';
44
import { TaskFunctionName } from '@idl/parsing/syntax-tree';
55
import { IDL_TRANSLATION } from '@idl/translation';
6+
import {
7+
FunctionCompletion,
8+
IFunctionCompletionOptions,
9+
} from '@idl/types/auto-complete';
610
import { GLOBAL_TOKEN_TYPES, TASK_REGEX } from '@idl/types/core';
711
import { Command, CompletionItemKind } from 'vscode-languageserver';
812

913
import { BuildCompletionItemsArg } from '../build-completion-items.interface';
1014
import { SORT_PRIORITY } from '../sort-priority.interface';
11-
import {
12-
FunctionCompletion,
13-
IFunctionCompletionOptions,
14-
} from './completion-functions.interface';
1515

1616
/**
1717
* Display names for functions

0 commit comments

Comments
 (0)