Skip to content

Commit 6460f7c

Browse files
WIP: Migrate final routines, update overall next next
1 parent 69c76e5 commit 6460f7c

9 files changed

Lines changed: 149 additions & 59 deletions

libs/parsing/index/src/lib/auto-complete/auto-complete-recipe.interface.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ import {
2222
IKeywordCompletionOptions,
2323
KeywordCompletion,
2424
} from './completion-for/completion-keyword.interface';
25+
import {
26+
IProcedureMethodCompletionOptions,
27+
ProcedureMethodCompletion,
28+
} from './completion-for/completion-procedure-methods.interface';
2529
import {
2630
IProcedureCompletionOptions,
2731
ProcedureCompletion,
@@ -30,6 +34,10 @@ import {
3034
IPropertyCompletionOptions,
3135
PropertyCompletion,
3236
} from './completion-for/completion-properties.interface';
37+
import {
38+
IPropertyInStructureCompletionOptions,
39+
PropertyInStructureCompletion,
40+
} from './completion-for/completion-properties-in-structures.interface';
3341
import {
3442
ISpecialFunctionCompletionOptions,
3543
SpecialFunctionCompletion,
@@ -62,7 +70,9 @@ export type AutoCompleteType =
6270
| IncludeCompletion
6371
| KeywordCompletion
6472
| ProcedureCompletion
73+
| ProcedureMethodCompletion
6574
| PropertyCompletion
75+
| PropertyInStructureCompletion
6676
| SpecialFunctionCompletion
6777
| SpecialProcedureCompletion
6878
| StructureNameCompletion
@@ -87,8 +97,12 @@ export type AutoCompleteRecipeOptions<T extends AutoCompleteType> =
8797
? IKeywordCompletionOptions
8898
: T extends ProcedureCompletion
8999
? IProcedureCompletionOptions
100+
: T extends ProcedureMethodCompletion
101+
? IProcedureMethodCompletionOptions
90102
: T extends PropertyCompletion
91103
? IPropertyCompletionOptions
104+
: T extends PropertyInStructureCompletion
105+
? IPropertyInStructureCompletionOptions
92106
: T extends SpecialFunctionCompletion
93107
? ISpecialFunctionCompletionOptions
94108
: T extends SpecialProcedureCompletion

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ import { BuildFunctionMethodCompletionItems } from './completion-for/completion-
1212
import { BuildFunctionCompletionItems } from './completion-for/completion-functions';
1313
import { BuildIncludeCompletionItems } from './completion-for/completion-include';
1414
import { BuildKeywordCompletionItems } from './completion-for/completion-keywords';
15+
import { BuildProcedureMethodCompletionItems } from './completion-for/completion-procedure-methods';
1516
import { BuildProcedureCompletionItems } from './completion-for/completion-procedures';
1617
import { BuildPropertyCompletionItems } from './completion-for/completion-properties';
18+
import { BuildPropertyInStructureCompletionItems } from './completion-for/completion-properties-in-structures';
1719
import { BuildSpecialFunctionCompletionItems } from './completion-for/completion-special-functions';
1820
import { BuildSpecialProcedureCompletionItems } from './completion-for/completion-special-procedures';
1921
import { BuildCompletionStructureNameItems } from './completion-for/completion-structure-names';
@@ -55,7 +57,9 @@ export const ALL_COMPLETION_ITEM_BUILDERS: BuildCompletionItemsLookup = {
5557
include: BuildIncludeCompletionItems,
5658
keyword: BuildKeywordCompletionItems,
5759
procedure: BuildProcedureCompletionItems,
60+
'procedure-method': BuildProcedureMethodCompletionItems,
5861
property: BuildPropertyCompletionItems,
62+
'property-in-structure': BuildPropertyInStructureCompletionItems,
5963
'special-function': BuildSpecialFunctionCompletionItems,
6064
'special-procedure': BuildSpecialProcedureCompletionItems,
6165
'structure-name': BuildCompletionStructureNameItems,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const FUNCTION_METHODS = IDL_DISPLAY_NAMES[GLOBAL_TOKEN_TYPES.FUNCTION_METHOD];
2525
/**
2626
* Adds variables to our completion items
2727
*/
28-
function AddCompletionFunctionMethodsForType(
28+
function BuildFunctionMethodCompletionItemsForType(
2929
arg: IFunctionMethodCompletionArg,
3030
type: IDLDataTypeBase<IDLTypes>
3131
) {
@@ -138,6 +138,6 @@ export function BuildFunctionMethodCompletionItems(
138138

139139
// process each type
140140
for (let i = 0; i < arg.options.type.length; i++) {
141-
AddCompletionFunctionMethodsForType(arg, arg.options.type[i]);
141+
BuildFunctionMethodCompletionItemsForType(arg, arg.options.type[i]);
142142
}
143143
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { IDLDataType } from '@idl/types/core';
2+
3+
import { BuildCompletionItemsArg } from '../build-completion-items.interface';
4+
5+
/**
6+
* Auto-complete for procedure methods
7+
*/
8+
export type ProcedureMethodCompletion = 'procedure-method';
9+
10+
/**
11+
* Options for adding procedure method completion
12+
*/
13+
export interface IProcedureMethodCompletionOptions {
14+
/**
15+
* Data type to add types for
16+
*/
17+
type: IDLDataType;
18+
}
19+
20+
export interface IProcedureMethodCompletionArg
21+
extends BuildCompletionItemsArg<ProcedureMethodCompletion> {
22+
/** Current methods that we have found */
23+
found?: { [key: string]: any };
24+
}

libs/parsing/index/src/lib/auto-complete/completion-for/add-completion-procedure-methods.ts renamed to libs/parsing/index/src/lib/auto-complete/completion-for/completion-procedure-methods.ts

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { FormatterType, IAssemblerOptions } from '@idl/assembling/config';
21
import { TransformCase } from '@idl/assembling/shared';
32
import { IDL_DISPLAY_NAMES } from '@idl/parsing/routines';
43
import { IDL_TRANSLATION } from '@idl/translation';
@@ -10,10 +9,13 @@ import {
109
IDLTypes,
1110
ParseIDLType,
1211
} from '@idl/types/core';
13-
import { CompletionItem, CompletionItemKind } from 'vscode-languageserver';
12+
import { CompletionItemKind } from 'vscode-languageserver';
1413

15-
import { IDLIndex } from '../../idl-index.class';
1614
import { SORT_PRIORITY } from '../sort-priority.interface';
15+
import {
16+
IProcedureMethodCompletionArg,
17+
IProcedureMethodCompletionOptions,
18+
} from './completion-procedure-methods.interface';
1719

1820
/**
1921
* Display names for procedure methods
@@ -24,24 +26,21 @@ const PROCEDURE_METHODS =
2426
/**
2527
* Adds variables to our completion items
2628
*/
27-
function AddCompletionProcedureMethodsForType(
28-
complete: CompletionItem[],
29-
index: IDLIndex,
30-
formatting: IAssemblerOptions<FormatterType>,
31-
type: IDLDataTypeBase<IDLTypes>,
32-
found: { [key: string]: any } = {}
29+
function BuildProcedureMethodCompletionItemsForType(
30+
arg: IProcedureMethodCompletionArg,
31+
type: IDLDataTypeBase<IDLTypes>
3332
) {
3433
/**
3534
* If we have any type, return everything
3635
*/
3736
if (type.name === IDL_TYPE_LOOKUP.ANY) {
3837
const displayNames = Object.values(PROCEDURE_METHODS);
3938
for (let i = 0; i < displayNames.length; i++) {
40-
complete.push({
39+
arg.complete.push({
4140
label: displayNames[i],
4241
insertText: TransformCase(
4342
displayNames[i].split('::')[1],
44-
formatting.style.routineMethods
43+
arg.formatting.style.routineMethods
4544
),
4645
kind: CompletionItemKind.Function,
4746
sortText: SORT_PRIORITY.METHODS,
@@ -58,23 +57,23 @@ function AddCompletionProcedureMethodsForType(
5857
const keysInternal = Object.keys(PROCEDURE_METHODS);
5958
for (let i = 0; i < keysInternal.length; i++) {
6059
const methodName = keysInternal[i].split('::')[1];
61-
if (keysInternal[i].startsWith(compareType) && !(methodName in found)) {
62-
complete.push({
60+
if (keysInternal[i].startsWith(compareType) && !(methodName in arg.found)) {
61+
arg.complete.push({
6362
label: PROCEDURE_METHODS[keysInternal[i]],
6463
insertText: TransformCase(
6564
PROCEDURE_METHODS[keysInternal[i]].split('::')[1],
66-
formatting.style.routineMethods
65+
arg.formatting.style.routineMethods
6766
),
6867
kind: CompletionItemKind.Function,
6968
sortText: SORT_PRIORITY.METHODS,
7069
detail: IDL_TRANSLATION.autoComplete.detail.procedureMethod,
7170
});
72-
found[methodName] = true;
71+
arg.found[methodName] = true;
7372
}
7473
}
7574

7675
// check for global token
77-
const global = index.findMatchingGlobalToken(
76+
const global = arg.index.findMatchingGlobalToken(
7877
GLOBAL_TOKEN_TYPES.STRUCTURE,
7978
type.name.toLocaleLowerCase()
8079
);
@@ -83,36 +82,43 @@ function AddCompletionProcedureMethodsForType(
8382
const inherits = global[0].meta.inherits;
8483
if (inherits.length > 0) {
8584
for (let i = 0; i < inherits.length; i++) {
86-
AddCompletionProcedureMethods(
87-
complete,
88-
index,
89-
formatting,
90-
ParseIDLType(inherits[i]),
91-
found
92-
);
85+
BuildProcedureMethodCompletionItems({
86+
...arg,
87+
...{
88+
options: {
89+
type: ParseIDLType(inherits[i]),
90+
},
91+
},
92+
});
9393
}
9494
}
9595
}
9696
}
9797

98+
/**
99+
* Creates options for creating property completion items
100+
*/
101+
export function GetProcedureMethodCompletionOptions(
102+
type: IDLDataType
103+
): IProcedureMethodCompletionOptions {
104+
return {
105+
type,
106+
};
107+
}
108+
98109
/**
99110
* Adds variables to our completion items
100111
*/
101-
export function AddCompletionProcedureMethods(
102-
complete: CompletionItem[],
103-
index: IDLIndex,
104-
formatting: IAssemblerOptions<FormatterType>,
105-
type: IDLDataType,
106-
found: { [key: string]: any } = {}
112+
export function BuildProcedureMethodCompletionItems(
113+
arg: IProcedureMethodCompletionArg
107114
) {
115+
// track found if we dont have it
116+
if (!arg.found) {
117+
arg.found = {};
118+
}
119+
108120
// process each type
109-
for (let i = 0; i < type.length; i++) {
110-
AddCompletionProcedureMethodsForType(
111-
complete,
112-
index,
113-
formatting,
114-
type[i],
115-
found
116-
);
121+
for (let i = 0; i < arg.options.type.length; i++) {
122+
BuildProcedureMethodCompletionItemsForType(arg, arg.options.type[i]);
117123
}
118124
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**
2+
* Auto-complete for properties in structures
3+
*/
4+
export type PropertyInStructureCompletion = 'property-in-structure';
5+
6+
/**
7+
* Options for adding properties in structures
8+
*/
9+
export interface IPropertyInStructureCompletionOptions {
10+
/** Structure name */
11+
name: string;
12+
/** Properties already specified */
13+
found: { [key: string]: boolean };
14+
}

libs/parsing/index/src/lib/auto-complete/completion-for/add-completion-properties-in-structures.ts renamed to libs/parsing/index/src/lib/auto-complete/completion-for/completion-properties-in-structures.ts

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ import { GLOBAL_TOKEN_TYPES } from '@idl/types/core';
1111
import { CompletionItem, CompletionItemKind } from 'vscode-languageserver';
1212

1313
import { IDLIndex } from '../../idl-index.class';
14+
import { BuildCompletionItemsArg } from '../build-completion-items.interface';
1415
import { SORT_PRIORITY } from '../sort-priority.interface';
16+
import {
17+
IPropertyInStructureCompletionOptions,
18+
PropertyInStructureCompletion,
19+
} from './completion-properties-in-structures.interface';
1520

1621
/**
1722
*Recursively finds properties and adds them to our completion list if we have not
@@ -69,14 +74,11 @@ function ResolveProperties(
6974
}
7075

7176
/**
72-
* Adds keyword completion properties inside of structures
77+
* Get options to do auto-complete in structures
7378
*/
74-
export function AddCompletionPropertiesInStructures(
75-
complete: CompletionItem[],
76-
index: IDLIndex,
77-
token: TreeToken<StructureNameToken>,
78-
formatting: IAssemblerOptions<FormatterType>
79-
) {
79+
export function GetPropertyInStructureCompletionOptions(
80+
token: TreeToken<StructureNameToken>
81+
): IPropertyInStructureCompletionOptions {
8082
// get the name of of our structure
8183
const name = token.match[0];
8284

@@ -89,6 +91,24 @@ export function AddCompletionPropertiesInStructures(
8991
found[GetPropertyName(props[i]).toLowerCase()] = true;
9092
}
9193

94+
return {
95+
name,
96+
found,
97+
};
98+
}
99+
100+
/**
101+
* Adds keyword completion properties inside of structures
102+
*/
103+
export function BuildPropertyInStructureCompletionItems(
104+
arg: BuildCompletionItemsArg<PropertyInStructureCompletion>
105+
) {
92106
// resolve properties
93-
ResolveProperties(complete, index, formatting, name, found);
107+
ResolveProperties(
108+
arg.complete,
109+
arg.index,
110+
arg.formatting,
111+
arg.options.name,
112+
arg.options.found
113+
);
94114
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
/**
2020
* Adds variables to our completion items
2121
*/
22-
function AddCompletionPropertiesForType(
22+
function BuildPropertyCompletionItemsForType(
2323
arg: IPropertyCompletionArg,
2424
type: IDLDataTypeBase<IDLTypes>
2525
) {
@@ -131,6 +131,6 @@ export function BuildPropertyCompletionItems(arg: IPropertyCompletionArg) {
131131

132132
// process each type
133133
for (let i = 0; i < arg.options.type.length; i++) {
134-
AddCompletionPropertiesForType(arg, arg.options.type[i]);
134+
BuildPropertyCompletionItemsForType(arg, arg.options.type[i]);
135135
}
136136
}

0 commit comments

Comments
 (0)