@glint/ember-tsc 1.6.0 → 1.6.2
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 +1 -0
- package/lib/cli/run-volar-tsc.d.ts +2 -0
- package/lib/cli/run-volar-tsc.d.ts.map +1 -0
- package/lib/cli/run-volar-tsc.js +32 -0
- package/lib/cli/run-volar-tsc.js.map +1 -0
- package/lib/config/config.d.ts +15 -0
- package/lib/config/config.d.ts.map +1 -0
- package/lib/config/config.js +21 -0
- package/lib/config/config.js.map +1 -0
- package/lib/config/environment.d.ts +26 -0
- package/lib/config/environment.d.ts.map +1 -0
- package/lib/config/environment.js +96 -0
- package/lib/config/environment.js.map +1 -0
- package/lib/config/index.d.ts +24 -0
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/index.js +37 -0
- package/lib/config/index.js.map +1 -0
- package/lib/config/loader.d.ts +28 -0
- package/lib/config/loader.d.ts.map +1 -0
- package/lib/config/loader.js +121 -0
- package/lib/config/loader.js.map +1 -0
- package/lib/config/types.cjs +3 -0
- package/lib/config/types.cjs.map +1 -0
- package/lib/config/types.d.cts +60 -0
- package/lib/config/types.d.cts.map +1 -0
- package/lib/environment-ember-template-imports/-private/environment/common.d.ts +13 -0
- package/lib/environment-ember-template-imports/-private/environment/common.d.ts.map +1 -0
- package/lib/environment-ember-template-imports/-private/environment/common.js +2 -0
- package/lib/environment-ember-template-imports/-private/environment/common.js.map +1 -0
- package/lib/environment-ember-template-imports/-private/environment/index.d.ts +3 -0
- package/lib/environment-ember-template-imports/-private/environment/index.d.ts.map +1 -0
- package/lib/environment-ember-template-imports/-private/environment/index.js +102 -0
- package/lib/environment-ember-template-imports/-private/environment/index.js.map +1 -0
- package/lib/environment-ember-template-imports/-private/environment/preprocess.d.ts +4 -0
- package/lib/environment-ember-template-imports/-private/environment/preprocess.d.ts.map +1 -0
- package/lib/environment-ember-template-imports/-private/environment/preprocess.js +42 -0
- package/lib/environment-ember-template-imports/-private/environment/preprocess.js.map +1 -0
- package/lib/environment-ember-template-imports/-private/environment/transform.d.ts +4 -0
- package/lib/environment-ember-template-imports/-private/environment/transform.d.ts.map +1 -0
- package/lib/environment-ember-template-imports/-private/environment/transform.js +134 -0
- package/lib/environment-ember-template-imports/-private/environment/transform.js.map +1 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -0
- package/lib/plugins/g-compiler-errors.d.ts +12 -0
- package/lib/plugins/g-compiler-errors.d.ts.map +1 -0
- package/lib/plugins/g-compiler-errors.js +58 -0
- package/lib/plugins/g-compiler-errors.js.map +1 -0
- package/lib/plugins/g-component-hover.d.ts +24 -0
- package/lib/plugins/g-component-hover.d.ts.map +1 -0
- package/lib/plugins/g-component-hover.js +135 -0
- package/lib/plugins/g-component-hover.js.map +1 -0
- package/lib/plugins/g-template-tag-symbols.d.ts +11 -0
- package/lib/plugins/g-template-tag-symbols.d.ts.map +1 -0
- package/lib/plugins/g-template-tag-symbols.js +48 -0
- package/lib/plugins/g-template-tag-symbols.js.map +1 -0
- package/lib/plugins/utils.d.ts +25 -0
- package/lib/plugins/utils.d.ts.map +1 -0
- package/lib/plugins/utils.js +63 -0
- package/lib/plugins/utils.js.map +1 -0
- package/lib/transform/diagnostics/augmentation.d.ts +4 -0
- package/lib/transform/diagnostics/augmentation.d.ts.map +1 -0
- package/lib/transform/diagnostics/augmentation.js +249 -0
- package/lib/transform/diagnostics/augmentation.js.map +1 -0
- package/lib/transform/diagnostics/index.d.ts +5 -0
- package/lib/transform/diagnostics/index.d.ts.map +1 -0
- package/lib/transform/diagnostics/index.js +2 -0
- package/lib/transform/diagnostics/index.js.map +1 -0
- package/lib/transform/index.d.ts +4 -0
- package/lib/transform/index.d.ts.map +1 -0
- package/lib/transform/index.js +2 -0
- package/lib/transform/index.js.map +1 -0
- package/lib/transform/template/code-features.d.ts +30 -0
- package/lib/transform/template/code-features.d.ts.map +1 -0
- package/lib/transform/template/code-features.js +26 -0
- package/lib/transform/template/code-features.js.map +1 -0
- package/lib/transform/template/glimmer-ast-mapping-tree.d.ts +80 -0
- package/lib/transform/template/glimmer-ast-mapping-tree.d.ts.map +1 -0
- package/lib/transform/template/glimmer-ast-mapping-tree.js +132 -0
- package/lib/transform/template/glimmer-ast-mapping-tree.js.map +1 -0
- package/lib/transform/template/inlining/index.d.ts +16 -0
- package/lib/transform/template/inlining/index.d.ts.map +1 -0
- package/lib/transform/template/inlining/index.js +21 -0
- package/lib/transform/template/inlining/index.js.map +1 -0
- package/lib/transform/template/inlining/tagged-strings.d.ts +8 -0
- package/lib/transform/template/inlining/tagged-strings.d.ts.map +1 -0
- package/lib/transform/template/inlining/tagged-strings.js +156 -0
- package/lib/transform/template/inlining/tagged-strings.js.map +1 -0
- package/lib/transform/template/map-template-contents.d.ts +121 -0
- package/lib/transform/template/map-template-contents.d.ts.map +1 -0
- package/lib/transform/template/map-template-contents.js +287 -0
- package/lib/transform/template/map-template-contents.js.map +1 -0
- package/lib/transform/template/rewrite-module.d.ts +22 -0
- package/lib/transform/template/rewrite-module.d.ts.map +1 -0
- package/lib/transform/template/rewrite-module.js +265 -0
- package/lib/transform/template/rewrite-module.js.map +1 -0
- package/lib/transform/template/scope-stack.d.ts +13 -0
- package/lib/transform/template/scope-stack.d.ts.map +1 -0
- package/lib/transform/template/scope-stack.js +28 -0
- package/lib/transform/template/scope-stack.js.map +1 -0
- package/lib/transform/template/template-to-typescript.d.ts +19 -0
- package/lib/transform/template/template-to-typescript.d.ts.map +1 -0
- package/lib/transform/template/template-to-typescript.js +1125 -0
- package/lib/transform/template/template-to-typescript.js.map +1 -0
- package/lib/transform/template/transformed-module.d.ts +111 -0
- package/lib/transform/template/transformed-module.d.ts.map +1 -0
- package/lib/transform/template/transformed-module.js +287 -0
- package/lib/transform/template/transformed-module.js.map +1 -0
- package/lib/transform/util.d.ts +7 -0
- package/lib/transform/util.d.ts.map +1 -0
- package/lib/transform/util.js +15 -0
- package/lib/transform/util.js.map +1 -0
- package/lib/volar/ember-language-plugin.d.ts +14 -0
- package/lib/volar/ember-language-plugin.d.ts.map +1 -0
- package/lib/volar/ember-language-plugin.js +91 -0
- package/lib/volar/ember-language-plugin.js.map +1 -0
- package/lib/volar/gts-virtual-code.d.ts +83 -0
- package/lib/volar/gts-virtual-code.d.ts.map +1 -0
- package/lib/volar/gts-virtual-code.js +210 -0
- package/lib/volar/gts-virtual-code.js.map +1 -0
- package/lib/volar/language-server.d.ts +2 -0
- package/lib/volar/language-server.d.ts.map +1 -0
- package/lib/volar/language-server.js +180 -0
- package/lib/volar/language-server.js.map +1 -0
- package/lib/volar/script-snapshot.d.ts +17 -0
- package/lib/volar/script-snapshot.d.ts.map +1 -0
- package/lib/volar/script-snapshot.js +24 -0
- package/lib/volar/script-snapshot.js.map +1 -0
- package/package.json +4 -4
- package/src/transform/template/inlining/tagged-strings.ts +21 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { preprocess } from './preprocess.js';
|
|
2
|
+
import { transform } from './transform.js';
|
|
3
|
+
export default function emberTemplateImportsEnvironment(options) {
|
|
4
|
+
let additionalSpecialForms = typeof options['additionalSpecialForms'] === 'object'
|
|
5
|
+
? options['additionalSpecialForms']
|
|
6
|
+
: {};
|
|
7
|
+
const additionalGlobalSpecialForms = additionalSpecialForms.globals ?? {};
|
|
8
|
+
const additionalGlobals = Array.isArray(options['additionalGlobals'])
|
|
9
|
+
? options['additionalGlobals']
|
|
10
|
+
: [];
|
|
11
|
+
const globalsForEmber = [
|
|
12
|
+
'action',
|
|
13
|
+
'component',
|
|
14
|
+
'debugger',
|
|
15
|
+
'each',
|
|
16
|
+
'each-in',
|
|
17
|
+
'has-block',
|
|
18
|
+
'has-block-params',
|
|
19
|
+
'helper',
|
|
20
|
+
'if',
|
|
21
|
+
'in-element',
|
|
22
|
+
'let',
|
|
23
|
+
'log',
|
|
24
|
+
'modifier',
|
|
25
|
+
'mount',
|
|
26
|
+
'mut',
|
|
27
|
+
'outlet',
|
|
28
|
+
'unbound',
|
|
29
|
+
'unless',
|
|
30
|
+
'with',
|
|
31
|
+
'yield',
|
|
32
|
+
];
|
|
33
|
+
/*
|
|
34
|
+
Ember 7.1+ built-in keywords (RFCs 389, 470, 560, 561, 562, 997, 998, 999,
|
|
35
|
+
1000). Their template-side signatures live in `KeywordsForEmber71` in
|
|
36
|
+
`types/-private/dsl/globals.d.ts` and are gated on `ember-source >= 7.1.0`
|
|
37
|
+
via the `HasEmber71BuiltIns` probe.
|
|
38
|
+
*/
|
|
39
|
+
const globalsForEmber71 = [
|
|
40
|
+
'and',
|
|
41
|
+
'array',
|
|
42
|
+
'element',
|
|
43
|
+
'eq',
|
|
44
|
+
'fn',
|
|
45
|
+
'gt',
|
|
46
|
+
'gte',
|
|
47
|
+
'hash',
|
|
48
|
+
'lt',
|
|
49
|
+
'lte',
|
|
50
|
+
'neq',
|
|
51
|
+
'not',
|
|
52
|
+
'on',
|
|
53
|
+
'or',
|
|
54
|
+
];
|
|
55
|
+
return {
|
|
56
|
+
tags: {
|
|
57
|
+
'@glint/ember-tsc/environment-ember-template-imports/-private/tag': {
|
|
58
|
+
hbs: {
|
|
59
|
+
typesModule: '@glint/ember-tsc/-private/dsl',
|
|
60
|
+
specialForms: {
|
|
61
|
+
globals: {
|
|
62
|
+
if: 'if',
|
|
63
|
+
unless: 'if-not',
|
|
64
|
+
yield: 'yield',
|
|
65
|
+
component: 'bind-invokable',
|
|
66
|
+
modifier: 'bind-invokable',
|
|
67
|
+
helper: 'bind-invokable',
|
|
68
|
+
...additionalGlobalSpecialForms,
|
|
69
|
+
},
|
|
70
|
+
imports: {
|
|
71
|
+
'@ember/helper': {
|
|
72
|
+
array: 'array-literal',
|
|
73
|
+
hash: 'object-literal',
|
|
74
|
+
...additionalSpecialForms.imports?.['@ember/helper'],
|
|
75
|
+
},
|
|
76
|
+
...additionalSpecialForms.imports,
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
globals: [
|
|
80
|
+
...globalsForEmber,
|
|
81
|
+
...globalsForEmber71,
|
|
82
|
+
...Object.keys(additionalGlobalSpecialForms),
|
|
83
|
+
...additionalGlobals,
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
extensions: {
|
|
89
|
+
'.gts': {
|
|
90
|
+
kind: 'typed-script',
|
|
91
|
+
preprocess,
|
|
92
|
+
transform,
|
|
93
|
+
},
|
|
94
|
+
'.gjs': {
|
|
95
|
+
kind: 'untyped-script',
|
|
96
|
+
preprocess,
|
|
97
|
+
transform,
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/environment-ember-template-imports/-private/environment/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,+BAA+B,CACrD,OAAgC;IAEhC,IAAI,sBAAsB,GACxB,OAAO,OAAO,CAAC,wBAAwB,CAAC,KAAK,QAAQ;QACnD,CAAC,CAAE,OAAO,CAAC,wBAAwB,CAA4B;QAC/D,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,4BAA4B,GAAG,sBAAsB,CAAC,OAAO,IAAI,EAAE,CAAC;IAE1E,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACnE,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAC9B,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,eAAe,GAAG;QACtB,QAAQ;QACR,WAAW;QACX,UAAU;QACV,MAAM;QACN,SAAS;QACT,WAAW;QACX,kBAAkB;QAClB,QAAQ;QACR,IAAI;QACJ,YAAY;QACZ,KAAK;QACL,KAAK;QACL,UAAU;QACV,OAAO;QACP,KAAK;QACL,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,MAAM;QACN,OAAO;KACR,CAAC;IAEF;;;;;MAKE;IACF,MAAM,iBAAiB,GAAG;QACxB,KAAK;QACL,OAAO;QACP,SAAS;QACT,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,MAAM;QACN,IAAI;QACJ,KAAK;QACL,KAAK;QACL,KAAK;QACL,IAAI;QACJ,IAAI;KACL,CAAC;IAEF,OAAO;QACL,IAAI,EAAE;YACJ,kEAAkE,EAAE;gBAClE,GAAG,EAAE;oBACH,WAAW,EAAE,+BAA+B;oBAC5C,YAAY,EAAE;wBACZ,OAAO,EAAE;4BACP,EAAE,EAAE,IAAI;4BACR,MAAM,EAAE,QAAQ;4BAChB,KAAK,EAAE,OAAO;4BACd,SAAS,EAAE,gBAAgB;4BAC3B,QAAQ,EAAE,gBAAgB;4BAC1B,MAAM,EAAE,gBAAgB;4BACxB,GAAG,4BAA4B;yBAChC;wBACD,OAAO,EAAE;4BACP,eAAe,EAAE;gCACf,KAAK,EAAE,eAAe;gCACtB,IAAI,EAAE,gBAAgB;gCACtB,GAAG,sBAAsB,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC;6BACrD;4BACD,GAAG,sBAAsB,CAAC,OAAO;yBAClC;qBACF;oBACD,OAAO,EAAE;wBACP,GAAG,eAAe;wBAClB,GAAG,iBAAiB;wBACpB,GAAG,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC;wBAC5C,GAAG,iBAAiB;qBACrB;iBACF;aACF;SACF;QACD,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,cAAc;gBACpB,UAAU;gBACV,SAAS;aACV;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,gBAAgB;gBACtB,UAAU;gBACV,SAAS;aACV;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preprocess.d.ts","sourceRoot":"","sources":["../../../../src/environment-ember-template-imports/-private/environment/preprocess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAc,cAAc,EAAoB,MAAM,aAAa,CAAC;AAQ3E,eAAO,MAAM,UAAU,EAAE,wBAAwB,CAAC,cAAc,CA0C/D,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { GLOBAL_TAG } from './common.js';
|
|
2
|
+
const TEMPLATE_START = `[${GLOBAL_TAG}\``;
|
|
3
|
+
const TEMPLATE_END = '`]';
|
|
4
|
+
import { Preprocessor } from 'content-tag';
|
|
5
|
+
const p = new Preprocessor();
|
|
6
|
+
export const preprocess = (source, path) => {
|
|
7
|
+
let templates = p.parse(source, { filename: path });
|
|
8
|
+
let templateLocations = [];
|
|
9
|
+
let contents = '';
|
|
10
|
+
let sourceOffset = 0;
|
|
11
|
+
for (let template of templates) {
|
|
12
|
+
let startTagOffset = template.startRange.startUtf16Codepoint;
|
|
13
|
+
let startTagEnd = template.startRange.endUtf16Codepoint;
|
|
14
|
+
let endTagOffset = template.endRange.startUtf16Codepoint;
|
|
15
|
+
let endTagEnd = template.endRange.endUtf16Codepoint;
|
|
16
|
+
contents += source.slice(sourceOffset, startTagOffset);
|
|
17
|
+
let transformedStart = contents.length;
|
|
18
|
+
contents += TEMPLATE_START;
|
|
19
|
+
let templateContent = source.slice(startTagEnd, endTagOffset);
|
|
20
|
+
let escapedContent = templateContent.replaceAll('${{', '\\${{').replaceAll('`', '\\`');
|
|
21
|
+
contents += escapedContent;
|
|
22
|
+
contents += TEMPLATE_END;
|
|
23
|
+
let transformedEnd = contents.length;
|
|
24
|
+
sourceOffset = endTagEnd;
|
|
25
|
+
templateLocations.push({
|
|
26
|
+
startTagOffset,
|
|
27
|
+
endTagOffset,
|
|
28
|
+
startTagLength: startTagEnd - startTagOffset,
|
|
29
|
+
endTagLength: endTagEnd - endTagOffset,
|
|
30
|
+
transformedStart,
|
|
31
|
+
transformedEnd,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
contents += source.slice(sourceOffset);
|
|
35
|
+
return {
|
|
36
|
+
contents,
|
|
37
|
+
data: {
|
|
38
|
+
templateLocations,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=preprocess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preprocess.js","sourceRoot":"","sources":["../../../../src/environment-ember-template-imports/-private/environment/preprocess.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAoC,MAAM,aAAa,CAAC;AAE3E,MAAM,cAAc,GAAG,IAAI,UAAU,IAAI,CAAC;AAC1C,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,MAAM,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC;AAE7B,MAAM,CAAC,MAAM,UAAU,GAA6C,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IACnF,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,IAAI,iBAAiB,GAA4B,EAAE,CAAC;IACpD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAC7D,IAAI,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACxD,IAAI,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACzD,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAEpD,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAEvD,IAAI,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC;QACvC,QAAQ,IAAI,cAAc,CAAC;QAE3B,IAAI,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC9D,IAAI,cAAc,GAAG,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvF,QAAQ,IAAI,cAAc,CAAC;QAC3B,QAAQ,IAAI,YAAY,CAAC;QACzB,IAAI,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;QAErC,YAAY,GAAG,SAAS,CAAC;QACzB,iBAAiB,CAAC,IAAI,CAAC;YACrB,cAAc;YACd,YAAY;YACZ,cAAc,EAAE,WAAW,GAAG,cAAc;YAC5C,YAAY,EAAE,SAAS,GAAG,YAAY;YACtC,gBAAgB;YAChB,cAAc;SACf,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvC,OAAO;QACL,QAAQ;QACR,IAAI,EAAE;YACJ,iBAAiB;SAClB;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../../src/environment-ember-template-imports/-private/environment/transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAc,cAAc,EAAoB,MAAM,aAAa,CAAC;AAI3E,eAAO,MAAM,SAAS,EAAE,uBAAuB,CAAC,cAAc,CA6D7D,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { GLOBAL_TAG } from './common.js';
|
|
2
|
+
export const transform = (data, { ts, context, setEmitMetadata }) => {
|
|
3
|
+
let f = ts.factory;
|
|
4
|
+
let { templateLocations } = data;
|
|
5
|
+
if (!templateLocations.length)
|
|
6
|
+
return (sf) => sf;
|
|
7
|
+
return function visit(node) {
|
|
8
|
+
let visitedNode = ts.visitEachChild(node, visit, context);
|
|
9
|
+
let transformedNode = transformNode(visitedNode);
|
|
10
|
+
return repairAncestry(transformedNode);
|
|
11
|
+
};
|
|
12
|
+
function transformNode(node) {
|
|
13
|
+
if (ts.isSourceFile(node)) {
|
|
14
|
+
// Add `import { hbs as __T } from 'ember-template-imports'` to the file
|
|
15
|
+
return addTagImport(f, node);
|
|
16
|
+
}
|
|
17
|
+
else if (isETIDefaultTemplate(ts, node)) {
|
|
18
|
+
// Annotate that this template is a default export
|
|
19
|
+
setEmitMetadata(node.expression, { prepend: 'export default ' });
|
|
20
|
+
return node;
|
|
21
|
+
}
|
|
22
|
+
else if (isETIDefaultSatisfiesTemplate(ts, node)) {
|
|
23
|
+
// Annotate that this template is a default export
|
|
24
|
+
setEmitMetadata(node.expression.expression, { prepend: 'export default ' });
|
|
25
|
+
return node;
|
|
26
|
+
}
|
|
27
|
+
else if (isETITemplateExpression(ts, node)) {
|
|
28
|
+
// Convert '[__T`foo`]' as an expression to just '__T`foo`'
|
|
29
|
+
let location = findTemplateLocation(templateLocations, node);
|
|
30
|
+
let template = node.elements[0];
|
|
31
|
+
setEmitMetadata(template, {
|
|
32
|
+
templateLocation: {
|
|
33
|
+
start: location.startTagOffset,
|
|
34
|
+
end: location.endTagOffset + location.endTagLength,
|
|
35
|
+
contentStart: location.startTagOffset + location.startTagLength,
|
|
36
|
+
contentEnd: location.endTagOffset,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
return template;
|
|
40
|
+
}
|
|
41
|
+
else if (isETITemplateProperty(ts, node)) {
|
|
42
|
+
// Convert '[__T`foo`]' in a class body to 'static { __T`foo` }'
|
|
43
|
+
let location = findTemplateLocation(templateLocations, node);
|
|
44
|
+
let template = node.name.expression;
|
|
45
|
+
setEmitMetadata(template, {
|
|
46
|
+
prepend: 'static { ',
|
|
47
|
+
append: ' }',
|
|
48
|
+
templateLocation: {
|
|
49
|
+
start: location.startTagOffset,
|
|
50
|
+
end: location.endTagOffset + location.endTagLength,
|
|
51
|
+
contentStart: location.startTagOffset + location.startTagLength,
|
|
52
|
+
contentEnd: location.endTagOffset,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
return buildStaticBlockForTemplate(f, template);
|
|
56
|
+
}
|
|
57
|
+
return node;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
// Many location operations in the TS AST rely on having an unbroken chain
|
|
61
|
+
// of `.parent` values fron a given node up to its containing `SourceFile`,
|
|
62
|
+
// but its transformation framework does not maintain these by default,
|
|
63
|
+
// so we explicitly reconnect nodes as we go.
|
|
64
|
+
function repairAncestry(node, parent = node.parent) {
|
|
65
|
+
// If the node already has a parent AND it's correct, we don't need
|
|
66
|
+
// to descend further.
|
|
67
|
+
if (parent && node.parent === parent)
|
|
68
|
+
return node;
|
|
69
|
+
Object.assign(node, { parent });
|
|
70
|
+
node.forEachChild((child) => {
|
|
71
|
+
repairAncestry(child, node);
|
|
72
|
+
});
|
|
73
|
+
return node;
|
|
74
|
+
}
|
|
75
|
+
function addTagImport(f, sourceFile) {
|
|
76
|
+
return f.updateSourceFile(sourceFile, [
|
|
77
|
+
f.createImportDeclaration([], f.createImportClause(false, undefined, f.createNamedImports([
|
|
78
|
+
f.createImportSpecifier(false, f.createIdentifier('hbs'), f.createIdentifier(GLOBAL_TAG)),
|
|
79
|
+
])), f.createStringLiteral('@glint/ember-tsc/environment-ember-template-imports/-private/tag')),
|
|
80
|
+
...sourceFile.statements,
|
|
81
|
+
]);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Implicit default export:
|
|
85
|
+
*
|
|
86
|
+
* ( <template></template> )
|
|
87
|
+
* ^ ExpressionStatement
|
|
88
|
+
*
|
|
89
|
+
* ( <template></template> satisfies ... )
|
|
90
|
+
* ^ SatisfiesExpression
|
|
91
|
+
*
|
|
92
|
+
* But!
|
|
93
|
+
*
|
|
94
|
+
* ( const X = <template></template> satisfies ... )
|
|
95
|
+
* ^ VariableStatement
|
|
96
|
+
*
|
|
97
|
+
* So when we check for a wrapping SatisfiesExpression, we need to also make sure
|
|
98
|
+
* the parent node is not a variable Statement.
|
|
99
|
+
*/
|
|
100
|
+
function isETIDefaultTemplate(ts, node) {
|
|
101
|
+
return ts.isExpressionStatement(node) && isETITemplateLiteral(ts, node.expression);
|
|
102
|
+
}
|
|
103
|
+
function isETIDefaultSatisfiesTemplate(ts, node) {
|
|
104
|
+
return (ts.isExpressionStatement(node) &&
|
|
105
|
+
ts.isSatisfiesExpression(node.expression) &&
|
|
106
|
+
isETITemplateLiteral(ts, node.expression.expression));
|
|
107
|
+
}
|
|
108
|
+
function isETITemplateProperty(ts, node) {
|
|
109
|
+
return (ts.isPropertyDeclaration(node) &&
|
|
110
|
+
ts.isComputedPropertyName(node.name) &&
|
|
111
|
+
isETITemplateLiteral(ts, node.name.expression));
|
|
112
|
+
}
|
|
113
|
+
function isETITemplateExpression(ts, node) {
|
|
114
|
+
return (ts.isArrayLiteralExpression(node) &&
|
|
115
|
+
node.elements.length === 1 &&
|
|
116
|
+
isETITemplateLiteral(ts, node.elements[0]));
|
|
117
|
+
}
|
|
118
|
+
function isETITemplateLiteral(ts, node) {
|
|
119
|
+
return (ts.isTaggedTemplateExpression(node) &&
|
|
120
|
+
ts.isNoSubstitutionTemplateLiteral(node.template) &&
|
|
121
|
+
ts.isIdentifier(node.tag) &&
|
|
122
|
+
node.tag.text === GLOBAL_TAG);
|
|
123
|
+
}
|
|
124
|
+
function findTemplateLocation(locations, node) {
|
|
125
|
+
let location = locations.find((loc) => loc.transformedStart === node.getStart());
|
|
126
|
+
if (!location) {
|
|
127
|
+
throw new Error('Internal error: missing location info for template');
|
|
128
|
+
}
|
|
129
|
+
return location;
|
|
130
|
+
}
|
|
131
|
+
function buildStaticBlockForTemplate(f, template) {
|
|
132
|
+
return f.createClassStaticBlockDeclaration(f.createBlock([f.createExpressionStatement(template)]));
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../../src/environment-ember-template-imports/-private/environment/transform.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GlintConfig, loadConfig, findConfig, createDefaultConfig } from './config/index.js';
|
|
2
|
+
import { createEmberLanguagePlugin } from './volar/ember-language-plugin.js';
|
|
3
|
+
import { VirtualGtsCode } from './volar/gts-virtual-code.js';
|
|
4
|
+
import { augmentDiagnostics } from './transform/diagnostics/augmentation.js';
|
|
5
|
+
export { loadConfig, findConfig, createDefaultConfig, createEmberLanguagePlugin, VirtualGtsCode, augmentDiagnostics, };
|
|
6
|
+
export type { GlintConfig };
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,EACL,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,kBAAkB,GACnB,CAAC;AAEF,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { loadConfig, findConfig, createDefaultConfig } from './config/index.js';
|
|
2
|
+
import { createEmberLanguagePlugin } from './volar/ember-language-plugin.js';
|
|
3
|
+
import { VirtualGtsCode } from './volar/gts-virtual-code.js';
|
|
4
|
+
import { augmentDiagnostics } from './transform/diagnostics/augmentation.js';
|
|
5
|
+
export { loadConfig, findConfig, createDefaultConfig, createEmberLanguagePlugin, VirtualGtsCode, augmentDiagnostics, };
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,EACL,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,kBAAkB,GACnB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LanguageServicePlugin } from '@volar/language-service';
|
|
2
|
+
/**
|
|
3
|
+
* This LanguageServicePlugin surfaces compiler/syntax errors as diagnostics
|
|
4
|
+
* within .gts/.gjs files, e.g. if there is an unclosed html tag or `{{` curly brace,
|
|
5
|
+
* the entire `<template>` tag region will be highlighted as an error.
|
|
6
|
+
*
|
|
7
|
+
* @GLINT_FEATURE_DIAGNOSTICS
|
|
8
|
+
* @GLINT_FEATURE_DIAGNOSTICS_LANGUAGE_SERVER
|
|
9
|
+
* @GLINT_FEATURE_DIAGNOSTICS_LANGUAGE_SERVER_GTS_COMPILER_ERRORS
|
|
10
|
+
*/
|
|
11
|
+
export declare function create(): LanguageServicePlugin;
|
|
12
|
+
//# sourceMappingURL=g-compiler-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"g-compiler-errors.d.ts","sourceRoot":"","sources":["../../src/plugins/g-compiler-errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAIrE;;;;;;;;GAQG;AACH,wBAAgB,MAAM,IAAI,qBAAqB,CAqD9C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { getEmbeddedInfo } from './utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* This LanguageServicePlugin surfaces compiler/syntax errors as diagnostics
|
|
4
|
+
* within .gts/.gjs files, e.g. if there is an unclosed html tag or `{{` curly brace,
|
|
5
|
+
* the entire `<template>` tag region will be highlighted as an error.
|
|
6
|
+
*
|
|
7
|
+
* @GLINT_FEATURE_DIAGNOSTICS
|
|
8
|
+
* @GLINT_FEATURE_DIAGNOSTICS_LANGUAGE_SERVER
|
|
9
|
+
* @GLINT_FEATURE_DIAGNOSTICS_LANGUAGE_SERVER_GTS_COMPILER_ERRORS
|
|
10
|
+
*/
|
|
11
|
+
export function create() {
|
|
12
|
+
return {
|
|
13
|
+
name: 'g-compiler-errors',
|
|
14
|
+
capabilities: {
|
|
15
|
+
diagnosticProvider: {
|
|
16
|
+
interFileDependencies: false,
|
|
17
|
+
workspaceDiagnostics: false,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
create(context) {
|
|
21
|
+
return {
|
|
22
|
+
provideDiagnostics(document) {
|
|
23
|
+
// `gts` is the ID of the root virtual code within the virtual/embedded code tree of our GtsVirtualCode.
|
|
24
|
+
// It is the untransformed .gts file; we use this file to generate diagnostics for
|
|
25
|
+
// `<template>` tag compiler errors because the diagnostic regions within the errors
|
|
26
|
+
// we get back from the compiler are already relative to the root/outer .gts file
|
|
27
|
+
// rather than relative to start of the template tag.
|
|
28
|
+
const info = getEmbeddedInfo(context, document, 'gts');
|
|
29
|
+
if (!info) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const virtualCode = info.root;
|
|
33
|
+
const transformedModule = virtualCode.transformedModule;
|
|
34
|
+
if (!transformedModule) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const parseErrors = [];
|
|
38
|
+
for (const error of transformedModule.errors) {
|
|
39
|
+
const start = document.positionAt(error.location.start);
|
|
40
|
+
const end = document.positionAt(error.location.end);
|
|
41
|
+
parseErrors.push({
|
|
42
|
+
range: {
|
|
43
|
+
start: start,
|
|
44
|
+
end: end,
|
|
45
|
+
},
|
|
46
|
+
severity: 1,
|
|
47
|
+
code: 9999,
|
|
48
|
+
source: 'glint',
|
|
49
|
+
message: error.message,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return parseErrors;
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=g-compiler-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"g-compiler-errors.js","sourceRoot":"","sources":["../../src/plugins/g-compiler-errors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,YAAY,EAAE;YACZ,kBAAkB,EAAE;gBAClB,qBAAqB,EAAE,KAAK;gBAC5B,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,MAAM,CAAC,OAAO;YACZ,OAAO;gBACL,kBAAkB,CAAC,QAAQ;oBACzB,wGAAwG;oBACxG,kFAAkF;oBAClF,oFAAoF;oBACpF,iFAAiF;oBACjF,qDAAqD;oBACrD,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAEvD,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO;oBACT,CAAC;oBAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;oBAE9B,MAAM,iBAAiB,GAAG,WAAW,CAAC,iBAAiB,CAAC;oBACxD,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBACvB,OAAO;oBACT,CAAC;oBAED,MAAM,WAAW,GAAwB,EAAE,CAAC;oBAE5C,KAAK,MAAM,KAAK,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;wBAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;wBAEpD,WAAW,CAAC,IAAI,CAAC;4BACf,KAAK,EAAE;gCACL,KAAK,EAAE,KAAK;gCACZ,GAAG,EAAE,GAAG;6BACT;4BACD,QAAQ,EAAE,CAAkD;4BAC5D,IAAI,EAAE,IAAI;4BACV,MAAM,EAAE,OAAO;4BACf,OAAO,EAAE,KAAK,CAAC,OAAO;yBACvB,CAAC,CAAC;oBACL,CAAC;oBAED,OAAO,WAAW,CAAC;gBACrB,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { LanguageServicePlugin } from '@volar/language-service';
|
|
2
|
+
export interface ComponentMeta {
|
|
3
|
+
args: Array<{
|
|
4
|
+
name: string;
|
|
5
|
+
type: string;
|
|
6
|
+
description: string;
|
|
7
|
+
required: boolean;
|
|
8
|
+
tags: Array<{
|
|
9
|
+
name: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
}>;
|
|
12
|
+
}>;
|
|
13
|
+
blocks: Array<{
|
|
14
|
+
name: string;
|
|
15
|
+
params: string;
|
|
16
|
+
}>;
|
|
17
|
+
element: string | null;
|
|
18
|
+
description: string;
|
|
19
|
+
}
|
|
20
|
+
export type TsPluginClient = {
|
|
21
|
+
getComponentMeta(fileName: string, tagName: string): Promise<ComponentMeta | null>;
|
|
22
|
+
};
|
|
23
|
+
export declare function create(getTsPluginClient: () => TsPluginClient | undefined): LanguageServicePlugin;
|
|
24
|
+
//# sourceMappingURL=g-component-hover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"g-component-hover.d.ts","sourceRoot":"","sources":["../../src/plugins/g-component-hover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAKrE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;QAClB,IAAI,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC9C,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;CACpF,CAAC;AAEF,wBAAgB,MAAM,CAAC,iBAAiB,EAAE,MAAM,cAAc,GAAG,SAAS,GAAG,qBAAqB,CA6CjG"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { getEmbeddedInfo } from './utils.js';
|
|
2
|
+
export function create(getTsPluginClient) {
|
|
3
|
+
return {
|
|
4
|
+
name: 'g-component-hover',
|
|
5
|
+
capabilities: {
|
|
6
|
+
hoverProvider: true,
|
|
7
|
+
},
|
|
8
|
+
create(_context) {
|
|
9
|
+
return {
|
|
10
|
+
async provideHover(document, position) {
|
|
11
|
+
const info = getEmbeddedInfo(_context, document, 'gts');
|
|
12
|
+
if (!info)
|
|
13
|
+
return;
|
|
14
|
+
const { root } = info;
|
|
15
|
+
const transformedModule = root.transformedModule;
|
|
16
|
+
if (!transformedModule)
|
|
17
|
+
return;
|
|
18
|
+
const offset = document.offsetAt(position);
|
|
19
|
+
const componentInfo = findComponentAtOffset(transformedModule, offset);
|
|
20
|
+
if (!componentInfo)
|
|
21
|
+
return;
|
|
22
|
+
const tsPluginClient = getTsPluginClient();
|
|
23
|
+
if (!tsPluginClient)
|
|
24
|
+
return;
|
|
25
|
+
const filePath = info.sourceScript.id.fsPath;
|
|
26
|
+
const meta = await tsPluginClient.getComponentMeta(filePath, componentInfo.tagName);
|
|
27
|
+
if (!meta)
|
|
28
|
+
return;
|
|
29
|
+
const content = formatComponentHover(componentInfo.tagName, meta);
|
|
30
|
+
if (!content)
|
|
31
|
+
return;
|
|
32
|
+
return {
|
|
33
|
+
range: {
|
|
34
|
+
start: document.positionAt(componentInfo.tagStart),
|
|
35
|
+
end: document.positionAt(componentInfo.tagEnd),
|
|
36
|
+
},
|
|
37
|
+
contents: {
|
|
38
|
+
kind: 'markdown',
|
|
39
|
+
value: content,
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function findComponentAtOffset(transformedModule, offset) {
|
|
48
|
+
for (const span of transformedModule.correlatedSpans) {
|
|
49
|
+
if (!span.glimmerAstMapping)
|
|
50
|
+
continue;
|
|
51
|
+
if (offset < span.originalStart || offset >= span.originalStart + span.originalLength)
|
|
52
|
+
continue;
|
|
53
|
+
const relativeOffset = offset - span.originalStart;
|
|
54
|
+
const elementNode = findElementNodeInTree(span.glimmerAstMapping, relativeOffset);
|
|
55
|
+
if (!elementNode)
|
|
56
|
+
continue;
|
|
57
|
+
if (elementNode.sourceNode.type !== 'ElementNode')
|
|
58
|
+
continue;
|
|
59
|
+
const tagName = elementNode.sourceNode.tag;
|
|
60
|
+
const firstChar = tagName.charAt(0);
|
|
61
|
+
// Components are PascalCase or namespaced (Foo.Bar)
|
|
62
|
+
if (firstChar !== firstChar.toUpperCase() && !tagName.includes('.')) {
|
|
63
|
+
return null; // plain element
|
|
64
|
+
}
|
|
65
|
+
const elementStart = span.originalStart + elementNode.originalRange.start;
|
|
66
|
+
const source = span.originalFile.contents;
|
|
67
|
+
const tagNameIdx = source.indexOf(tagName, elementStart);
|
|
68
|
+
const tagStart = tagNameIdx >= 0 ? tagNameIdx : elementStart;
|
|
69
|
+
const tagEnd = tagStart + tagName.length;
|
|
70
|
+
return { tagName, tagStart, tagEnd };
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
function findElementNodeInTree(tree, offset) {
|
|
75
|
+
if (offset < tree.originalRange.start || offset >= tree.originalRange.end) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
// Check children first (depth-first, find the deepest ElementNode)
|
|
79
|
+
for (const child of tree.children) {
|
|
80
|
+
const result = findElementNodeInTree(child, offset);
|
|
81
|
+
if (result)
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
if (tree.sourceNode?.type === 'ElementNode') {
|
|
85
|
+
return tree;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
function formatComponentHover(tagName, meta) {
|
|
90
|
+
const hasArgs = meta.args.length > 0;
|
|
91
|
+
const hasBlocks = meta.blocks.length > 0;
|
|
92
|
+
const hasElement = meta.element && meta.element !== 'unknown' && meta.element !== 'null';
|
|
93
|
+
if (!hasArgs && !hasBlocks && !hasElement && !meta.description)
|
|
94
|
+
return null;
|
|
95
|
+
const lines = [];
|
|
96
|
+
if (meta.description) {
|
|
97
|
+
lines.push(meta.description);
|
|
98
|
+
lines.push('');
|
|
99
|
+
}
|
|
100
|
+
lines.push('```typescript');
|
|
101
|
+
lines.push(`interface ${tagName}Signature {`);
|
|
102
|
+
if (hasElement) {
|
|
103
|
+
lines.push(` Element: ${meta.element}`);
|
|
104
|
+
}
|
|
105
|
+
if (hasArgs) {
|
|
106
|
+
lines.push(' Args: {');
|
|
107
|
+
for (const arg of meta.args) {
|
|
108
|
+
const opt = arg.required ? '' : '?';
|
|
109
|
+
const deprecatedTag = arg.tags.find((t) => t.name === 'deprecated');
|
|
110
|
+
if (deprecatedTag) {
|
|
111
|
+
// Strike through only the property name using Unicode combining
|
|
112
|
+
// strikethrough (U+0336) — keeps the type readable and syntax-highlighted.
|
|
113
|
+
const reason = deprecatedTag.text ? ` ${deprecatedTag.text}` : '';
|
|
114
|
+
const struckName = arg.name.split('').join('\u0336') + '\u0336';
|
|
115
|
+
lines.push(` ${struckName}${opt}: ${arg.type} // @deprecated${reason}`);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
const comment = arg.description ? ` // ${arg.description}` : '';
|
|
119
|
+
lines.push(` ${arg.name}${opt}: ${arg.type}${comment}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
lines.push(' }');
|
|
123
|
+
}
|
|
124
|
+
if (hasBlocks) {
|
|
125
|
+
lines.push(' Blocks: {');
|
|
126
|
+
for (const block of meta.blocks) {
|
|
127
|
+
lines.push(` ${block.name}: ${block.params}`);
|
|
128
|
+
}
|
|
129
|
+
lines.push(' }');
|
|
130
|
+
}
|
|
131
|
+
lines.push('}');
|
|
132
|
+
lines.push('```');
|
|
133
|
+
return lines.join('\n');
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=g-component-hover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"g-component-hover.js","sourceRoot":"","sources":["../../src/plugins/g-component-hover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LanguageServicePlugin } from '@volar/language-service';
|
|
2
|
+
/**
|
|
3
|
+
* Provides symbols for `<template>` tags within .gts/.gjs files.
|
|
4
|
+
* This among other things faciliates code folding of the `<template>` region.
|
|
5
|
+
*
|
|
6
|
+
* Note that this ONLY provides symbols for the `<template>` tag and none of the
|
|
7
|
+
* contents of the template tag. Symbols inside or outside the template tag are actually
|
|
8
|
+
* generated by the syntactic TS LanguageServicePlugin (search `createTypeScriptSyntacticPlugin`).
|
|
9
|
+
*/
|
|
10
|
+
export declare function create(): LanguageServicePlugin;
|
|
11
|
+
//# sourceMappingURL=g-template-tag-symbols.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"g-template-tag-symbols.d.ts","sourceRoot":"","sources":["../../src/plugins/g-template-tag-symbols.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAIrE;;;;;;;GAOG;AACH,wBAAgB,MAAM,IAAI,qBAAqB,CAyC9C"}
|