@azerothjs/language-service 0.4.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +259 -0
- package/dist/html-source.d.ts +12 -0
- package/dist/html-source.d.ts.map +1 -0
- package/dist/html-source.js +108 -0
- package/dist/html-source.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/language-data.d.ts +41 -0
- package/dist/language-data.d.ts.map +1 -0
- package/dist/language-data.js +164 -0
- package/dist/language-data.js.map +1 -0
- package/dist/mapping.d.ts +71 -0
- package/dist/mapping.d.ts.map +1 -0
- package/dist/mapping.js +123 -0
- package/dist/mapping.js.map +1 -0
- package/dist/markup-model.d.ts +67 -0
- package/dist/markup-model.d.ts.map +1 -0
- package/dist/markup-model.js +313 -0
- package/dist/markup-model.js.map +1 -0
- package/dist/protocol.d.ts +176 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +58 -0
- package/dist/protocol.js.map +1 -0
- package/dist/providers/completion.d.ts +26 -0
- package/dist/providers/completion.d.ts.map +1 -0
- package/dist/providers/completion.js +339 -0
- package/dist/providers/completion.js.map +1 -0
- package/dist/providers/css-service.d.ts +7 -0
- package/dist/providers/css-service.d.ts.map +1 -0
- package/dist/providers/css-service.js +84 -0
- package/dist/providers/css-service.js.map +1 -0
- package/dist/providers/diagnostics.d.ts +5 -0
- package/dist/providers/diagnostics.d.ts.map +1 -0
- package/dist/providers/diagnostics.js +89 -0
- package/dist/providers/diagnostics.js.map +1 -0
- package/dist/providers/editing.d.ts +17 -0
- package/dist/providers/editing.d.ts.map +1 -0
- package/dist/providers/editing.js +176 -0
- package/dist/providers/editing.js.map +1 -0
- package/dist/providers/hover.d.ts +5 -0
- package/dist/providers/hover.d.ts.map +1 -0
- package/dist/providers/hover.js +213 -0
- package/dist/providers/hover.js.map +1 -0
- package/dist/providers/html-service.d.ts +8 -0
- package/dist/providers/html-service.d.ts.map +1 -0
- package/dist/providers/html-service.js +108 -0
- package/dist/providers/html-service.js.map +1 -0
- package/dist/providers/inlay-hints.d.ts +25 -0
- package/dist/providers/inlay-hints.d.ts.map +1 -0
- package/dist/providers/inlay-hints.js +52 -0
- package/dist/providers/inlay-hints.js.map +1 -0
- package/dist/providers/navigation.d.ts +16 -0
- package/dist/providers/navigation.d.ts.map +1 -0
- package/dist/providers/navigation.js +107 -0
- package/dist/providers/navigation.js.map +1 -0
- package/dist/providers/semantic-tokens.d.ts +5 -0
- package/dist/providers/semantic-tokens.d.ts.map +1 -0
- package/dist/providers/semantic-tokens.js +63 -0
- package/dist/providers/semantic-tokens.js.map +1 -0
- package/dist/providers/signature.d.ts +5 -0
- package/dist/providers/signature.d.ts.map +1 -0
- package/dist/providers/signature.js +38 -0
- package/dist/providers/signature.js.map +1 -0
- package/dist/providers/structure.d.ts +19 -0
- package/dist/providers/structure.d.ts.map +1 -0
- package/dist/providers/structure.js +188 -0
- package/dist/providers/structure.js.map +1 -0
- package/dist/providers/symbols.d.ts +8 -0
- package/dist/providers/symbols.d.ts.map +1 -0
- package/dist/providers/symbols.js +108 -0
- package/dist/providers/symbols.js.map +1 -0
- package/dist/request.d.ts +37 -0
- package/dist/request.d.ts.map +1 -0
- package/dist/request.js +49 -0
- package/dist/request.js.map +1 -0
- package/dist/service.d.ts +73 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +177 -0
- package/dist/service.js.map +1 -0
- package/dist/text.d.ts +25 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +66 -0
- package/dist/text.js.map +1 -0
- package/dist/ts-project.d.ts +75 -0
- package/dist/ts-project.d.ts.map +1 -0
- package/dist/ts-project.js +266 -0
- package/dist/ts-project.js.map +1 -0
- package/dist/uri.d.ts +21 -0
- package/dist/uri.d.ts.map +1 -0
- package/dist/uri.js +41 -0
- package/dist/uri.js.map +1 -0
- package/dist/virtual-code.d.ts +27 -0
- package/dist/virtual-code.d.ts.map +1 -0
- package/dist/virtual-code.js +360 -0
- package/dist/virtual-code.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/** Zero-based line/character position. */
|
|
2
|
+
export interface Position {
|
|
3
|
+
line: number;
|
|
4
|
+
character: number;
|
|
5
|
+
}
|
|
6
|
+
/** A half-open `[start, end)` range. */
|
|
7
|
+
export interface Range {
|
|
8
|
+
start: Position;
|
|
9
|
+
end: Position;
|
|
10
|
+
}
|
|
11
|
+
/** A range within a specific document. */
|
|
12
|
+
export interface Location {
|
|
13
|
+
uri: string;
|
|
14
|
+
range: Range;
|
|
15
|
+
}
|
|
16
|
+
/** LSP CompletionItemKind values (subset used here). */
|
|
17
|
+
export declare const CompletionItemKind: {
|
|
18
|
+
readonly Method: 2;
|
|
19
|
+
readonly Function: 3;
|
|
20
|
+
readonly Field: 5;
|
|
21
|
+
readonly Variable: 6;
|
|
22
|
+
readonly Class: 7;
|
|
23
|
+
readonly Interface: 8;
|
|
24
|
+
readonly Property: 10;
|
|
25
|
+
readonly Enum: 13;
|
|
26
|
+
readonly Keyword: 14;
|
|
27
|
+
readonly Snippet: 15;
|
|
28
|
+
readonly Constant: 21;
|
|
29
|
+
readonly Struct: 22;
|
|
30
|
+
readonly Event: 23;
|
|
31
|
+
readonly TypeParameter: 25;
|
|
32
|
+
readonly Text: 1;
|
|
33
|
+
readonly Module: 9;
|
|
34
|
+
readonly Value: 12;
|
|
35
|
+
readonly Component: 7;
|
|
36
|
+
};
|
|
37
|
+
export type CompletionItemKindValue = (typeof CompletionItemKind)[keyof typeof CompletionItemKind];
|
|
38
|
+
/** A single completion suggestion. */
|
|
39
|
+
export interface CompletionItem {
|
|
40
|
+
label: string;
|
|
41
|
+
kind: CompletionItemKindValue;
|
|
42
|
+
detail?: string;
|
|
43
|
+
documentation?: string;
|
|
44
|
+
insertText?: string;
|
|
45
|
+
/** 2 = Snippet (LSP InsertTextFormat). */
|
|
46
|
+
insertTextFormat?: 1 | 2;
|
|
47
|
+
sortText?: string;
|
|
48
|
+
filterText?: string;
|
|
49
|
+
/** Edits applied alongside the insertion (e.g. an auto-import line). */
|
|
50
|
+
additionalTextEdits?: TextEdit[];
|
|
51
|
+
/** Opaque payload so a resolve step can fetch lazy detail from TS. */
|
|
52
|
+
data?: unknown;
|
|
53
|
+
}
|
|
54
|
+
/** Hover content for a position. */
|
|
55
|
+
export interface Hover {
|
|
56
|
+
/** Markdown contents. */
|
|
57
|
+
contents: string;
|
|
58
|
+
range?: Range;
|
|
59
|
+
}
|
|
60
|
+
/** A signature-help overload. */
|
|
61
|
+
export interface SignatureInformation {
|
|
62
|
+
label: string;
|
|
63
|
+
documentation?: string;
|
|
64
|
+
parameters: {
|
|
65
|
+
label: string;
|
|
66
|
+
documentation?: string;
|
|
67
|
+
}[];
|
|
68
|
+
}
|
|
69
|
+
/** Signature help at a call site. */
|
|
70
|
+
export interface SignatureHelp {
|
|
71
|
+
signatures: SignatureInformation[];
|
|
72
|
+
activeSignature: number;
|
|
73
|
+
activeParameter: number;
|
|
74
|
+
}
|
|
75
|
+
/** A text replacement within the current document. */
|
|
76
|
+
export interface TextEdit {
|
|
77
|
+
range: Range;
|
|
78
|
+
newText: string;
|
|
79
|
+
}
|
|
80
|
+
/** Edits grouped by document URI (for rename). */
|
|
81
|
+
export interface WorkspaceEdit {
|
|
82
|
+
changes: Record<string, TextEdit[]>;
|
|
83
|
+
}
|
|
84
|
+
/** LSP SymbolKind values (subset). */
|
|
85
|
+
export declare const SymbolKind: {
|
|
86
|
+
readonly File: 1;
|
|
87
|
+
readonly Module: 2;
|
|
88
|
+
readonly Namespace: 3;
|
|
89
|
+
readonly Class: 5;
|
|
90
|
+
readonly Method: 6;
|
|
91
|
+
readonly Property: 7;
|
|
92
|
+
readonly Field: 8;
|
|
93
|
+
readonly Constructor: 9;
|
|
94
|
+
readonly Enum: 10;
|
|
95
|
+
readonly Interface: 11;
|
|
96
|
+
readonly Function: 12;
|
|
97
|
+
readonly Variable: 13;
|
|
98
|
+
readonly Constant: 14;
|
|
99
|
+
readonly Struct: 23;
|
|
100
|
+
readonly EnumMember: 22;
|
|
101
|
+
readonly TypeParameter: 26;
|
|
102
|
+
readonly Object: 19;
|
|
103
|
+
};
|
|
104
|
+
export type SymbolKindValue = (typeof SymbolKind)[keyof typeof SymbolKind];
|
|
105
|
+
/** A hierarchical document symbol. */
|
|
106
|
+
export interface DocumentSymbol {
|
|
107
|
+
name: string;
|
|
108
|
+
detail?: string;
|
|
109
|
+
kind: SymbolKindValue;
|
|
110
|
+
range: Range;
|
|
111
|
+
selectionRange: Range;
|
|
112
|
+
children?: DocumentSymbol[];
|
|
113
|
+
}
|
|
114
|
+
/** A flat workspace symbol. */
|
|
115
|
+
export interface WorkspaceSymbol {
|
|
116
|
+
name: string;
|
|
117
|
+
kind: SymbolKindValue;
|
|
118
|
+
location: Location;
|
|
119
|
+
containerName?: string;
|
|
120
|
+
}
|
|
121
|
+
/** LSP DiagnosticSeverity. */
|
|
122
|
+
export declare const DiagnosticSeverity: {
|
|
123
|
+
readonly Error: 1;
|
|
124
|
+
readonly Warning: 2;
|
|
125
|
+
readonly Information: 3;
|
|
126
|
+
readonly Hint: 4;
|
|
127
|
+
};
|
|
128
|
+
export type DiagnosticSeverityValue = (typeof DiagnosticSeverity)[keyof typeof DiagnosticSeverity];
|
|
129
|
+
/** A problem reported on a range. */
|
|
130
|
+
export interface Diagnostic {
|
|
131
|
+
range: Range;
|
|
132
|
+
severity: DiagnosticSeverityValue;
|
|
133
|
+
message: string;
|
|
134
|
+
code?: string | number;
|
|
135
|
+
source: string;
|
|
136
|
+
}
|
|
137
|
+
/** A smart-selection range and its enclosing parent (for Expand Selection). */
|
|
138
|
+
export interface SelectionRange {
|
|
139
|
+
range: Range;
|
|
140
|
+
parent?: SelectionRange;
|
|
141
|
+
}
|
|
142
|
+
/** An inline hint. `kind`: 1 Type, 2 Parameter. */
|
|
143
|
+
export interface InlayHint {
|
|
144
|
+
position: Position;
|
|
145
|
+
label: string;
|
|
146
|
+
kind?: 1 | 2;
|
|
147
|
+
paddingLeft?: boolean;
|
|
148
|
+
paddingRight?: boolean;
|
|
149
|
+
}
|
|
150
|
+
/** An occurrence of a symbol to highlight. `kind`: 1 text, 2 read, 3 write. */
|
|
151
|
+
export interface DocumentHighlight {
|
|
152
|
+
range: Range;
|
|
153
|
+
kind?: 1 | 2 | 3;
|
|
154
|
+
}
|
|
155
|
+
/** A collapsible region. */
|
|
156
|
+
export interface FoldingRange {
|
|
157
|
+
startLine: number;
|
|
158
|
+
endLine: number;
|
|
159
|
+
kind?: 'comment' | 'region' | 'imports';
|
|
160
|
+
}
|
|
161
|
+
/** A code action (quick fix / refactor). */
|
|
162
|
+
export interface CodeAction {
|
|
163
|
+
title: string;
|
|
164
|
+
kind: string;
|
|
165
|
+
edit?: WorkspaceEdit;
|
|
166
|
+
/** True for the preferred fix at a position. */
|
|
167
|
+
isPreferred?: boolean;
|
|
168
|
+
}
|
|
169
|
+
/** Raw semantic-token data in LSP's packed delta encoding. */
|
|
170
|
+
export interface SemanticTokens {
|
|
171
|
+
data: number[];
|
|
172
|
+
}
|
|
173
|
+
/** The token types this service emits, in legend order. */
|
|
174
|
+
export declare const SEMANTIC_TOKEN_TYPES: readonly ["component", "tag", "attribute", "event", "string", "delimiter"];
|
|
175
|
+
export type SemanticTokenType = (typeof SEMANTIC_TOKEN_TYPES)[number];
|
|
176
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/protocol.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Editor-agnostic result types for the language service. They mirror the
|
|
2
|
+
// Language Server Protocol shapes closely (and reuse its numeric enums) so the
|
|
3
|
+
// `@azerothjs/language-server` adapter is a near-passthrough, but the core
|
|
4
|
+
// itself depends on nothing but TypeScript and the compiler - which keeps it
|
|
5
|
+
// unit-testable without an editor in the loop.
|
|
6
|
+
/** LSP CompletionItemKind values (subset used here). */
|
|
7
|
+
export const CompletionItemKind = {
|
|
8
|
+
Method: 2,
|
|
9
|
+
Function: 3,
|
|
10
|
+
Field: 5,
|
|
11
|
+
Variable: 6,
|
|
12
|
+
Class: 7,
|
|
13
|
+
Interface: 8,
|
|
14
|
+
Property: 10,
|
|
15
|
+
Enum: 13,
|
|
16
|
+
Keyword: 14,
|
|
17
|
+
Snippet: 15,
|
|
18
|
+
Constant: 21,
|
|
19
|
+
Struct: 22,
|
|
20
|
+
Event: 23,
|
|
21
|
+
TypeParameter: 25,
|
|
22
|
+
Text: 1,
|
|
23
|
+
Module: 9,
|
|
24
|
+
Value: 12,
|
|
25
|
+
Component: 7
|
|
26
|
+
};
|
|
27
|
+
/** LSP SymbolKind values (subset). */
|
|
28
|
+
export const SymbolKind = {
|
|
29
|
+
File: 1,
|
|
30
|
+
Module: 2,
|
|
31
|
+
Namespace: 3,
|
|
32
|
+
Class: 5,
|
|
33
|
+
Method: 6,
|
|
34
|
+
Property: 7,
|
|
35
|
+
Field: 8,
|
|
36
|
+
Constructor: 9,
|
|
37
|
+
Enum: 10,
|
|
38
|
+
Interface: 11,
|
|
39
|
+
Function: 12,
|
|
40
|
+
Variable: 13,
|
|
41
|
+
Constant: 14,
|
|
42
|
+
Struct: 23,
|
|
43
|
+
EnumMember: 22,
|
|
44
|
+
TypeParameter: 26,
|
|
45
|
+
Object: 19
|
|
46
|
+
};
|
|
47
|
+
/** LSP DiagnosticSeverity. */
|
|
48
|
+
export const DiagnosticSeverity = {
|
|
49
|
+
Error: 1,
|
|
50
|
+
Warning: 2,
|
|
51
|
+
Information: 3,
|
|
52
|
+
Hint: 4
|
|
53
|
+
};
|
|
54
|
+
/** The token types this service emits, in legend order. */
|
|
55
|
+
export const SEMANTIC_TOKEN_TYPES = [
|
|
56
|
+
'component', 'tag', 'attribute', 'event', 'string', 'delimiter'
|
|
57
|
+
];
|
|
58
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,+EAA+E;AAC/E,2EAA2E;AAC3E,6EAA6E;AAC7E,+CAA+C;AAuB/C,wDAAwD;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAC/B;IACI,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,EAAE;IACT,aAAa,EAAE,EAAE;IACjB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,EAAE;IACT,SAAS,EAAE,CAAC;CACN,CAAC;AA2DX,sCAAsC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;IACZ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,WAAW,EAAE,CAAC;IACd,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,EAAE;IACd,aAAa,EAAE,EAAE;IACjB,MAAM,EAAE,EAAE;CACJ,CAAC;AAwBX,8BAA8B;AAC9B,MAAM,CAAC,MAAM,kBAAkB,GAC/B;IACI,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,WAAW,EAAE,CAAC;IACd,IAAI,EAAE,CAAC;CACD,CAAC;AA8DX,2DAA2D;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW;CACzD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type CompletionItem } from '../protocol.ts';
|
|
2
|
+
import { type RequestContext } from '../request.ts';
|
|
3
|
+
/** Payload attached to TS-sourced items so `resolveCompletion` can fill detail. */
|
|
4
|
+
export interface CompletionData {
|
|
5
|
+
virtualFile: string;
|
|
6
|
+
generatedOffset: number;
|
|
7
|
+
name: string;
|
|
8
|
+
source?: string;
|
|
9
|
+
tsData?: unknown;
|
|
10
|
+
}
|
|
11
|
+
/** Toggles for which completion sources contribute. All on by default. */
|
|
12
|
+
export interface CompletionOptions {
|
|
13
|
+
/** Suggest not-yet-imported symbols (and add the import on accept). */
|
|
14
|
+
autoImports?: boolean;
|
|
15
|
+
/** Expand built-in components to snippet bodies (`<For …>{…}</For>`). */
|
|
16
|
+
componentSnippets?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Produces completion items for the caret at `offset`. */
|
|
19
|
+
export declare function getCompletions(ctx: RequestContext, offset: number, options?: CompletionOptions): CompletionItem[];
|
|
20
|
+
/**
|
|
21
|
+
* Fills in detail/documentation for a TS-sourced completion item lazily.
|
|
22
|
+
*
|
|
23
|
+
* @returns the same item augmented, or unchanged for markup items.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveCompletion(ctx: RequestContext, item: CompletionItem): CompletionItem;
|
|
26
|
+
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/providers/completion.ts"],"names":[],"mappings":"AAaA,OAAO,EAEH,KAAK,cAAc,EAEtB,MAAM,gBAAgB,CAAC;AAUxB,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEjE,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAE3B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAE9B,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc,EAAE,CAgDrH;AA+RD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,GAAG,cAAc,CA8B3F"}
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
// Context-aware completion. The markup model says where the caret is; that
|
|
2
|
+
// decides which vocabulary to offer:
|
|
3
|
+
// - tag name -> HTML elements, built-in components, and in-scope
|
|
4
|
+
// PascalCase identifiers (user components, via TS);
|
|
5
|
+
// - attribute name -> the tag's attributes + DOM events (or a component's
|
|
6
|
+
// documented props);
|
|
7
|
+
// - expression/script/text -> delegate to TypeScript at the mapped offset
|
|
8
|
+
// (full type-aware completion), plus tag suggestions right
|
|
9
|
+
// after a `<`.
|
|
10
|
+
// TypeScript-sourced items carry a `data` payload so documentation/detail can
|
|
11
|
+
// be fetched lazily on resolve.
|
|
12
|
+
import ts from 'typescript';
|
|
13
|
+
import { CompletionItemKind } from "../protocol.js";
|
|
14
|
+
import { classifyPosition, enclosingElement } from "../markup-model.js";
|
|
15
|
+
import { BUILTIN_COMPONENTS, BUILTIN_COMPONENT_MAP, DOM_EVENTS, attributeDocumentation } from "../language-data.js";
|
|
16
|
+
import { htmlCompletions, eventDocumentation } from "./html-service.js";
|
|
17
|
+
import { cssCompletions } from "./css-service.js";
|
|
18
|
+
import { toGenerated } from "../request.js";
|
|
19
|
+
/** Produces completion items for the caret at `offset`. */
|
|
20
|
+
export function getCompletions(ctx, offset, options = {}) {
|
|
21
|
+
const context = classifyPosition(ctx.source, offset);
|
|
22
|
+
const position = ctx.lineIndex.positionAt(offset);
|
|
23
|
+
switch (context.kind) {
|
|
24
|
+
case 'tagName':
|
|
25
|
+
return tagCompletions(ctx, offset, options);
|
|
26
|
+
case 'attributeName':
|
|
27
|
+
return isComponentTag(context.tag)
|
|
28
|
+
? componentAttributeCompletions(ctx, offset, context.tag)
|
|
29
|
+
// HTML attributes (with docs/value hints), minus the lowercase
|
|
30
|
+
// `on*` events - AzerothJS binds camelCase handlers (`onClick`).
|
|
31
|
+
// Fill in docs for common attributes the HTML dataset omits.
|
|
32
|
+
: [
|
|
33
|
+
...htmlCompletions(ctx.source, position)
|
|
34
|
+
.filter(i => !/^on[a-z]/.test(i.label))
|
|
35
|
+
.map(i => i.documentation ? i : { ...i, documentation: attributeDocumentation(i.label) }),
|
|
36
|
+
...eventCompletions()
|
|
37
|
+
];
|
|
38
|
+
case 'attributeValue':
|
|
39
|
+
if (isComponentTag(context.tag)) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
// `style="…"` is CSS; everything else gets HTML value enums
|
|
43
|
+
// (`type="text|email|…"`, booleans, …) from the HTML engine.
|
|
44
|
+
return context.attribute === 'style'
|
|
45
|
+
? cssCompletions(ctx.source, offset)
|
|
46
|
+
: htmlCompletions(ctx.source, position);
|
|
47
|
+
case 'expression':
|
|
48
|
+
case 'script':
|
|
49
|
+
case 'text':
|
|
50
|
+
{
|
|
51
|
+
const items = tsCompletions(ctx, offset, options);
|
|
52
|
+
// After a `<`, markup can begin even in plain expression position.
|
|
53
|
+
if (ctx.source[offset - 1] === '<') {
|
|
54
|
+
items.push(...tagCompletions(ctx, offset, options));
|
|
55
|
+
}
|
|
56
|
+
return items;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** True for a component tag (PascalCase, dotted, or a known built-in). */
|
|
61
|
+
function isComponentTag(tag) {
|
|
62
|
+
return /^[A-Z]/.test(tag) || tag.includes('.') || BUILTIN_COMPONENT_MAP.has(tag);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Tag-position completion: HTML elements (from the HTML language service, with
|
|
66
|
+
* MDN docs) plus the framework's built-in components and in-scope user
|
|
67
|
+
* components.
|
|
68
|
+
*/
|
|
69
|
+
function tagCompletions(ctx, offset, options) {
|
|
70
|
+
const snippets = options.componentSnippets !== false;
|
|
71
|
+
const items = htmlCompletions(ctx.source, ctx.lineIndex.positionAt(offset));
|
|
72
|
+
for (const component of BUILTIN_COMPONENTS) {
|
|
73
|
+
const snippet = snippets ? BUILTIN_SNIPPETS[component.name] : undefined;
|
|
74
|
+
items.push({
|
|
75
|
+
label: component.name,
|
|
76
|
+
kind: CompletionItemKind.Class,
|
|
77
|
+
detail: component.detail,
|
|
78
|
+
documentation: component.doc,
|
|
79
|
+
insertText: snippet ?? component.name,
|
|
80
|
+
insertTextFormat: snippet ? 2 : 1,
|
|
81
|
+
sortText: `0_${component.name}`
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// In-scope PascalCase value identifiers are likely user components; entries
|
|
85
|
+
// that aren't yet imported carry a code action so resolve adds the import.
|
|
86
|
+
const generatedOffset = mappedOrAnchor(ctx, offset);
|
|
87
|
+
if (generatedOffset !== null) {
|
|
88
|
+
for (const entry of rawTsEntries(ctx, generatedOffset)) {
|
|
89
|
+
if (isLikelyComponent(entry)) {
|
|
90
|
+
const autoImport = entry.source !== undefined || entry.hasAction === true;
|
|
91
|
+
if (autoImport && options.autoImports === false) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
items.push({
|
|
95
|
+
label: entry.name,
|
|
96
|
+
kind: CompletionItemKind.Class,
|
|
97
|
+
detail: autoImport ? `component — import from ${entry.source ?? 'module'}` : 'component',
|
|
98
|
+
sortText: `${autoImport ? '2' : '1'}_${entry.name}`,
|
|
99
|
+
data: completionData(ctx, generatedOffset, entry)
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return items;
|
|
105
|
+
}
|
|
106
|
+
/** Snippet bodies for the control-flow built-ins (the `<` is already typed). */
|
|
107
|
+
const BUILTIN_SNIPPETS = {
|
|
108
|
+
Show: 'Show when={$1}>$0</Show>',
|
|
109
|
+
For: 'For each={$1} key={$2}>{($3) => $0}</For>',
|
|
110
|
+
Switch: 'Switch>\n\t<Match when={$1}>$0</Match>\n</Switch>',
|
|
111
|
+
Match: 'Match when={$1}>$0</Match>',
|
|
112
|
+
Suspense: 'Suspense on={[$1]} fallback={$2}>$0</Suspense>',
|
|
113
|
+
Portal: 'Portal>$0</Portal>',
|
|
114
|
+
ErrorBoundary: 'ErrorBoundary fallback={(err, reset) => $1}>$0</ErrorBoundary>',
|
|
115
|
+
Transition: 'Transition when={$1}>$0</Transition>'
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Attribute completion for a component: prop names derived from the component's
|
|
119
|
+
* actual props type (via TypeScript), falling back to the built-in table when
|
|
120
|
+
* the type can't be resolved (e.g. the tag isn't fully formed yet). Plus events.
|
|
121
|
+
*/
|
|
122
|
+
function componentAttributeCompletions(ctx, offset, tag) {
|
|
123
|
+
const items = typedPropCompletions(ctx, offset);
|
|
124
|
+
if (items.length === 0) {
|
|
125
|
+
const builtin = BUILTIN_COMPONENT_MAP.get(tag);
|
|
126
|
+
for (const prop of builtin?.props ?? []) {
|
|
127
|
+
items.push({
|
|
128
|
+
label: prop.name,
|
|
129
|
+
kind: CompletionItemKind.Property,
|
|
130
|
+
detail: `${tag} prop${prop.required ? ' (required)' : ''}`,
|
|
131
|
+
documentation: prop.doc,
|
|
132
|
+
insertText: `${prop.name}={$0}`,
|
|
133
|
+
insertTextFormat: 2,
|
|
134
|
+
sortText: `0_${prop.name}`
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
items.push(...eventCompletions());
|
|
139
|
+
return items;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Props of the component whose opening tag holds the caret, read from its props
|
|
143
|
+
* type. Works by querying TypeScript inside the generated `Tag({ … })` call's
|
|
144
|
+
* object literal, where the expected properties are exactly the props.
|
|
145
|
+
*/
|
|
146
|
+
function typedPropCompletions(ctx, offset) {
|
|
147
|
+
const element = enclosingElement(ctx.source, offset);
|
|
148
|
+
if (!element || !element.isComponent) {
|
|
149
|
+
return [];
|
|
150
|
+
}
|
|
151
|
+
const generatedTag = ctx.virtual.mapping.toGenerated(element.start + 1);
|
|
152
|
+
if (generatedTag === null) {
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
const brace = ctx.virtual.code.indexOf('{', generatedTag + element.tag.length);
|
|
156
|
+
if (brace === -1) {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
return rawTsEntries(ctx, brace + 1)
|
|
160
|
+
.filter(entry => entry.kind === ts.ScriptElementKind.memberVariableElement && entry.name !== 'children')
|
|
161
|
+
.map(entry => ({
|
|
162
|
+
label: entry.name,
|
|
163
|
+
kind: CompletionItemKind.Property,
|
|
164
|
+
detail: 'prop',
|
|
165
|
+
insertText: `${entry.name}={$0}`,
|
|
166
|
+
insertTextFormat: 2,
|
|
167
|
+
sortText: `0_${entry.name}`,
|
|
168
|
+
data: completionData(ctx, brace + 1, entry)
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
/** DOM event handler attributes (`on*`). */
|
|
172
|
+
function eventCompletions() {
|
|
173
|
+
return DOM_EVENTS.map(name => ({
|
|
174
|
+
label: name,
|
|
175
|
+
kind: CompletionItemKind.Event,
|
|
176
|
+
detail: 'DOM event handler',
|
|
177
|
+
documentation: eventDocumentation(name),
|
|
178
|
+
insertText: `${name}={$0}`,
|
|
179
|
+
insertTextFormat: 2,
|
|
180
|
+
sortText: `3_${name}`
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
/** Full type-aware completion from TypeScript at the mapped offset. */
|
|
184
|
+
function tsCompletions(ctx, offset, options) {
|
|
185
|
+
const generatedOffset = mappedOrAnchor(ctx, offset);
|
|
186
|
+
if (generatedOffset === null) {
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
return rawTsEntries(ctx, generatedOffset)
|
|
190
|
+
.filter(entry => options.autoImports !== false || entry.source === undefined)
|
|
191
|
+
.map(entry => ({
|
|
192
|
+
label: entry.name,
|
|
193
|
+
kind: tsKindToCompletionKind(entry.kind),
|
|
194
|
+
insertText: entry.insertText,
|
|
195
|
+
sortText: entry.sortText,
|
|
196
|
+
filterText: entry.filterText,
|
|
197
|
+
data: completionData(ctx, generatedOffset, entry)
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
/** Raw TypeScript completion entries at a virtual-module offset. */
|
|
201
|
+
function rawTsEntries(ctx, generatedOffset) {
|
|
202
|
+
const completions = ctx.project.service.getCompletionsAtPosition(ctx.virtualFile, generatedOffset, { includeCompletionsForModuleExports: true, includeCompletionsWithInsertText: true });
|
|
203
|
+
return completions?.entries ?? [];
|
|
204
|
+
}
|
|
205
|
+
/** Builds the lazy-resolve payload for a TS entry. */
|
|
206
|
+
function completionData(ctx, generatedOffset, entry) {
|
|
207
|
+
return {
|
|
208
|
+
virtualFile: ctx.virtualFile,
|
|
209
|
+
generatedOffset,
|
|
210
|
+
name: entry.name,
|
|
211
|
+
source: entry.source,
|
|
212
|
+
tsData: entry.data
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* True when a completion entry looks like a user component: a PascalCase value
|
|
217
|
+
* (class/function/const/alias) that isn't an ambient global and isn't already a
|
|
218
|
+
* built-in we list explicitly.
|
|
219
|
+
*/
|
|
220
|
+
function isLikelyComponent(entry) {
|
|
221
|
+
if (!/^[A-Z]/.test(entry.name) || BUILTIN_COMPONENT_MAP.has(entry.name)) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
const modifiers = entry.kindModifiers?.split(',') ?? [];
|
|
225
|
+
if (modifiers.includes(ts.ScriptElementKindModifier.ambientModifier)) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
return entry.kind === ts.ScriptElementKind.classElement
|
|
229
|
+
|| entry.kind === ts.ScriptElementKind.functionElement
|
|
230
|
+
|| entry.kind === ts.ScriptElementKind.alias
|
|
231
|
+
|| entry.kind === ts.ScriptElementKind.constElement
|
|
232
|
+
|| entry.kind === ts.ScriptElementKind.variableElement
|
|
233
|
+
|| entry.kind === ts.ScriptElementKind.letElement;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* The mapped offset, or - when the caret is in markup scaffolding - the nearest
|
|
237
|
+
* mapped offset to its left, so TypeScript can still answer with in-scope names
|
|
238
|
+
* (used for component suggestions in a half-typed tag).
|
|
239
|
+
*/
|
|
240
|
+
function mappedOrAnchor(ctx, offset) {
|
|
241
|
+
for (let o = offset; o >= 0; o--) {
|
|
242
|
+
const generated = toGenerated(ctx, o);
|
|
243
|
+
if (generated !== null) {
|
|
244
|
+
return generated;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
/** Maps a TS completion entry kind to an LSP CompletionItemKind. */
|
|
250
|
+
function tsKindToCompletionKind(kind) {
|
|
251
|
+
switch (kind) {
|
|
252
|
+
case ts.ScriptElementKind.functionElement:
|
|
253
|
+
case ts.ScriptElementKind.localFunctionElement:
|
|
254
|
+
return CompletionItemKind.Function;
|
|
255
|
+
case ts.ScriptElementKind.memberFunctionElement:
|
|
256
|
+
return CompletionItemKind.Method;
|
|
257
|
+
case ts.ScriptElementKind.memberVariableElement:
|
|
258
|
+
case ts.ScriptElementKind.memberGetAccessorElement:
|
|
259
|
+
case ts.ScriptElementKind.memberSetAccessorElement:
|
|
260
|
+
return CompletionItemKind.Field;
|
|
261
|
+
case ts.ScriptElementKind.classElement:
|
|
262
|
+
return CompletionItemKind.Class;
|
|
263
|
+
case ts.ScriptElementKind.interfaceElement:
|
|
264
|
+
return CompletionItemKind.Interface;
|
|
265
|
+
case ts.ScriptElementKind.enumElement:
|
|
266
|
+
return CompletionItemKind.Enum;
|
|
267
|
+
case ts.ScriptElementKind.enumMemberElement:
|
|
268
|
+
return CompletionItemKind.Enum;
|
|
269
|
+
case ts.ScriptElementKind.moduleElement:
|
|
270
|
+
return CompletionItemKind.Module;
|
|
271
|
+
case ts.ScriptElementKind.typeParameterElement:
|
|
272
|
+
return CompletionItemKind.TypeParameter;
|
|
273
|
+
case ts.ScriptElementKind.constElement:
|
|
274
|
+
return CompletionItemKind.Constant;
|
|
275
|
+
case ts.ScriptElementKind.variableElement:
|
|
276
|
+
case ts.ScriptElementKind.letElement:
|
|
277
|
+
case ts.ScriptElementKind.parameterElement:
|
|
278
|
+
return CompletionItemKind.Variable;
|
|
279
|
+
case ts.ScriptElementKind.keyword:
|
|
280
|
+
return CompletionItemKind.Keyword;
|
|
281
|
+
default:
|
|
282
|
+
return CompletionItemKind.Text;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/** Formatter settings TypeScript needs to render an auto-import edit. */
|
|
286
|
+
const RESOLVE_FORMAT_OPTIONS = {
|
|
287
|
+
indentSize: 4,
|
|
288
|
+
tabSize: 4,
|
|
289
|
+
convertTabsToSpaces: true,
|
|
290
|
+
newLineCharacter: '\n',
|
|
291
|
+
insertSpaceAfterCommaDelimiter: true,
|
|
292
|
+
semicolons: ts.SemicolonPreference.Insert
|
|
293
|
+
};
|
|
294
|
+
/**
|
|
295
|
+
* Fills in detail/documentation for a TS-sourced completion item lazily.
|
|
296
|
+
*
|
|
297
|
+
* @returns the same item augmented, or unchanged for markup items.
|
|
298
|
+
*/
|
|
299
|
+
export function resolveCompletion(ctx, item) {
|
|
300
|
+
const data = item.data;
|
|
301
|
+
if (!data || data.virtualFile !== ctx.virtualFile) {
|
|
302
|
+
return item;
|
|
303
|
+
}
|
|
304
|
+
const details = ctx.project.service.getCompletionEntryDetails(data.virtualFile, data.generatedOffset, data.name, RESOLVE_FORMAT_OPTIONS, data.source, undefined, data.tsData);
|
|
305
|
+
if (!details) {
|
|
306
|
+
return item;
|
|
307
|
+
}
|
|
308
|
+
return {
|
|
309
|
+
...item,
|
|
310
|
+
detail: ts.displayPartsToString(details.displayParts) || item.detail,
|
|
311
|
+
documentation: ts.displayPartsToString(details.documentation) || item.documentation,
|
|
312
|
+
// Auto-import: TS returns the import insertion as a code action; surface
|
|
313
|
+
// it as additional edits, mapped back to the original document.
|
|
314
|
+
additionalTextEdits: importEdits(ctx, details.codeActions) ?? item.additionalTextEdits
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
/** Maps a completion's import code action to original-document text edits. */
|
|
318
|
+
function importEdits(ctx, actions) {
|
|
319
|
+
if (!actions || actions.length === 0) {
|
|
320
|
+
return undefined;
|
|
321
|
+
}
|
|
322
|
+
const edits = [];
|
|
323
|
+
for (const action of actions) {
|
|
324
|
+
for (const change of action.changes) {
|
|
325
|
+
if (change.fileName !== ctx.virtualFile) {
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
for (const textChange of change.textChanges) {
|
|
329
|
+
const mapped = ctx.virtual.mapping.toOriginalRange(textChange.span.start, textChange.span.start + textChange.span.length);
|
|
330
|
+
if (mapped === null) {
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
edits.push({ range: ctx.lineIndex.rangeAt(mapped.start, mapped.end), newText: textChange.newText });
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return edits.length > 0 ? edits : undefined;
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/providers/completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type CompletionItem, type Hover } from '../protocol.ts';
|
|
2
|
+
import { LineIndex } from '../text.ts';
|
|
3
|
+
/** CSS property/value completion inside an inline `style="…"`. */
|
|
4
|
+
export declare function cssCompletions(source: string, offset: number): CompletionItem[];
|
|
5
|
+
/** CSS hover (property/value docs) inside an inline `style="…"`. */
|
|
6
|
+
export declare function cssHover(source: string, offset: number, lineIndex: LineIndex): Hover | null;
|
|
7
|
+
//# sourceMappingURL=css-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-service.d.ts","sourceRoot":"","sources":["../../src/providers/css-service.ts"],"names":[],"mappings":"AASA,OAAO,EAEH,KAAK,cAAc,EACnB,KAAK,KAAK,EAEb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA2CvC,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CAkB/E;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI,CA4B3F"}
|