@glint/ember-tsc 1.7.3 → 1.7.5
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/lib/plugins/g-component-hover.js +26 -2
- package/lib/plugins/g-component-hover.js.map +1 -1
- package/lib/transform/template/inlining/tagged-strings.d.ts.map +1 -1
- package/lib/transform/template/inlining/tagged-strings.js +13 -1
- package/lib/transform/template/inlining/tagged-strings.js.map +1 -1
- package/package.json +1 -1
- package/src/plugins/g-component-hover.ts +27 -2
- package/src/transform/template/inlining/tagged-strings.ts +13 -1
|
@@ -63,10 +63,34 @@ function findComponentAtOffset(transformedModule, offset) {
|
|
|
63
63
|
return null; // plain element
|
|
64
64
|
}
|
|
65
65
|
const elementStart = span.originalStart + elementNode.originalRange.start;
|
|
66
|
+
const elementEnd = span.originalStart + elementNode.originalRange.end;
|
|
66
67
|
const source = span.originalFile.contents;
|
|
67
|
-
const
|
|
68
|
-
const tagStart =
|
|
68
|
+
const openIdx = source.indexOf(tagName, elementStart);
|
|
69
|
+
const tagStart = openIdx >= 0 ? openIdx : elementStart;
|
|
69
70
|
const tagEnd = tagStart + tagName.length;
|
|
71
|
+
// Also look for the closing tag (`</Foo>`) so hover works there too. The
|
|
72
|
+
// search is bounded by `elementEnd`; `lastIndexOf` returns -1 for a
|
|
73
|
+
// self-closing element (which has no `</Foo>`) or any index <= `tagStart`
|
|
74
|
+
// we treat as "no closing tag" so the closing-tag check is a no-op.
|
|
75
|
+
const closeMarker = `</${tagName}`;
|
|
76
|
+
const closeMarkerIdx = source.lastIndexOf(closeMarker, elementEnd);
|
|
77
|
+
const closeStart = closeMarkerIdx > tagStart ? closeMarkerIdx + 2 : -1;
|
|
78
|
+
const closeEnd = closeStart >= 0 ? closeStart + tagName.length : -1;
|
|
79
|
+
// Only contribute a component-signature hover when the cursor is on the
|
|
80
|
+
// tag name itself (opening OR closing). Without this gate the plugin
|
|
81
|
+
// returns a hit for any offset inside the element's source range (args,
|
|
82
|
+
// attributes, content), and the language client concatenates the
|
|
83
|
+
// synthesized `interface XSignature { ... }` block with the TS hover for
|
|
84
|
+
// whatever symbol the user is actually pointing at (e.g. `@size`),
|
|
85
|
+
// producing a confusing two-part tooltip.
|
|
86
|
+
const onOpen = offset >= tagStart && offset < tagEnd;
|
|
87
|
+
const onClose = closeStart >= 0 && offset >= closeStart && offset < closeEnd;
|
|
88
|
+
if (!onOpen && !onClose) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
if (onClose) {
|
|
92
|
+
return { tagName, tagStart: closeStart, tagEnd: closeEnd };
|
|
93
|
+
}
|
|
70
94
|
return { tagName, tagStart, tagEnd };
|
|
71
95
|
}
|
|
72
96
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"g-component-hover.js","sourceRoot":"","sources":["../../src/plugins/g-component-hover.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"g-component-hover.js","sourceRoot":"","sources":["../../src/plugins/g-component-hover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tagged-strings.d.ts","sourceRoot":"","sources":["../../../../src/transform/template/inlining/tagged-strings.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAIlB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAU,KAAK,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAoB,UAAU,EAAkB,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAA4C,MAAM,YAAY,CAAC;AAE7F,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,KAAK,EACT,IAAI,EAAE,EAAE,CAAC,wBAAwB,EACjC,IAAI,EAAE,iBAAiB,GAAG,SAAS,EACnC,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,gBAAgB,GAC5B,qBAAqB,
|
|
1
|
+
{"version":3,"file":"tagged-strings.d.ts","sourceRoot":"","sources":["../../../../src/transform/template/inlining/tagged-strings.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAIlB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAU,KAAK,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAoB,UAAU,EAAkB,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAA4C,MAAM,YAAY,CAAC;AAE7F,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,KAAK,EACT,IAAI,EAAE,EAAE,CAAC,wBAAwB,EACjC,IAAI,EAAE,iBAAiB,GAAG,SAAS,EACnC,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,gBAAgB,GAC5B,qBAAqB,CAsHvB"}
|
|
@@ -14,7 +14,19 @@ export function calculateTaggedTemplateSpans(ts, node, meta, script, environment
|
|
|
14
14
|
if (info) {
|
|
15
15
|
assert(ts.isNoSubstitutionTemplateLiteral(node.template), 'No interpolated values in template strings');
|
|
16
16
|
let { typesModule, globals } = info.tagConfig;
|
|
17
|
-
|
|
17
|
+
// Use the cooked text (`text`) rather than `rawText`. For .gts files, the
|
|
18
|
+
// gts preprocessor (see `environment-ember-template-imports/-private/
|
|
19
|
+
// environment/preprocess.ts`) escapes backticks and `${{` sequences inside
|
|
20
|
+
// template content so the wrapped chunk parses as a valid JS template
|
|
21
|
+
// literal. `rawText` preserves those backslash-escapes as literal
|
|
22
|
+
// characters, which inflates the template length by 1 per escape and
|
|
23
|
+
// shifts every downstream source-map offset by the same amount (manifests
|
|
24
|
+
// as hover/go-to-definition spans landing past the start of any identifier
|
|
25
|
+
// that follows an escaped backtick or `${{` in the same template, e.g.
|
|
26
|
+
// hyphenated keywords used after backtick-quoted text in a comment). The
|
|
27
|
+
// cooked `text` reverses those escapes, restoring 1:1 correspondence with
|
|
28
|
+
// the original source.
|
|
29
|
+
let template = node.template.text;
|
|
18
30
|
// environment-specific transforms may emit templateLocation in meta, in
|
|
19
31
|
// which case we use that. Otherwise we use the reported location from the
|
|
20
32
|
// node itself (which is presumably correct because no transform has messed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tagged-strings.js","sourceRoot":"","sources":["../../../../src/transform/template/inlining/tagged-strings.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAS,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAyB,iBAAiB,EAAyB,MAAM,YAAY,CAAC;AAE7F,MAAM,UAAU,4BAA4B,CAC1C,EAAS,EACT,IAAiC,EACjC,IAAmC,EACnC,MAAkB,EAClB,WAA6B;IAE7B,IAAI,UAAU,GAAqB,EAAE,CAAC;IACtC,IAAI,MAAM,GAA0B,EAAE,CAAC;IACvC,IAAI,YAAY,GAAiC,EAAE,CAAC;IACpD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAEnB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,gBAAgB,GAAG,uBAAuB,CAAC,EAAE,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;IACxE,IAAI,IAAI,GAAG,cAAc,CAAC,gBAAgB,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9D,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,CACJ,EAAE,CAAC,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,EACjD,4CAA4C,CAC7C,CAAC;QAEF,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9C,
|
|
1
|
+
{"version":3,"file":"tagged-strings.js","sourceRoot":"","sources":["../../../../src/transform/template/inlining/tagged-strings.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -93,11 +93,36 @@ function findComponentAtOffset(
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
const elementStart = span.originalStart + elementNode.originalRange.start;
|
|
96
|
+
const elementEnd = span.originalStart + elementNode.originalRange.end;
|
|
96
97
|
const source = span.originalFile.contents;
|
|
97
|
-
const
|
|
98
|
-
const tagStart =
|
|
98
|
+
const openIdx = source.indexOf(tagName, elementStart);
|
|
99
|
+
const tagStart = openIdx >= 0 ? openIdx : elementStart;
|
|
99
100
|
const tagEnd = tagStart + tagName.length;
|
|
100
101
|
|
|
102
|
+
// Also look for the closing tag (`</Foo>`) so hover works there too. The
|
|
103
|
+
// search is bounded by `elementEnd`; `lastIndexOf` returns -1 for a
|
|
104
|
+
// self-closing element (which has no `</Foo>`) or any index <= `tagStart`
|
|
105
|
+
// we treat as "no closing tag" so the closing-tag check is a no-op.
|
|
106
|
+
const closeMarker = `</${tagName}`;
|
|
107
|
+
const closeMarkerIdx = source.lastIndexOf(closeMarker, elementEnd);
|
|
108
|
+
const closeStart = closeMarkerIdx > tagStart ? closeMarkerIdx + 2 : -1;
|
|
109
|
+
const closeEnd = closeStart >= 0 ? closeStart + tagName.length : -1;
|
|
110
|
+
|
|
111
|
+
// Only contribute a component-signature hover when the cursor is on the
|
|
112
|
+
// tag name itself (opening OR closing). Without this gate the plugin
|
|
113
|
+
// returns a hit for any offset inside the element's source range (args,
|
|
114
|
+
// attributes, content), and the language client concatenates the
|
|
115
|
+
// synthesized `interface XSignature { ... }` block with the TS hover for
|
|
116
|
+
// whatever symbol the user is actually pointing at (e.g. `@size`),
|
|
117
|
+
// producing a confusing two-part tooltip.
|
|
118
|
+
const onOpen = offset >= tagStart && offset < tagEnd;
|
|
119
|
+
const onClose = closeStart >= 0 && offset >= closeStart && offset < closeEnd;
|
|
120
|
+
if (!onOpen && !onClose) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
if (onClose) {
|
|
124
|
+
return { tagName, tagStart: closeStart, tagEnd: closeEnd };
|
|
125
|
+
}
|
|
101
126
|
return { tagName, tagStart, tagEnd };
|
|
102
127
|
}
|
|
103
128
|
return null;
|
|
@@ -36,7 +36,19 @@ export function calculateTaggedTemplateSpans(
|
|
|
36
36
|
);
|
|
37
37
|
|
|
38
38
|
let { typesModule, globals } = info.tagConfig;
|
|
39
|
-
|
|
39
|
+
// Use the cooked text (`text`) rather than `rawText`. For .gts files, the
|
|
40
|
+
// gts preprocessor (see `environment-ember-template-imports/-private/
|
|
41
|
+
// environment/preprocess.ts`) escapes backticks and `${{` sequences inside
|
|
42
|
+
// template content so the wrapped chunk parses as a valid JS template
|
|
43
|
+
// literal. `rawText` preserves those backslash-escapes as literal
|
|
44
|
+
// characters, which inflates the template length by 1 per escape and
|
|
45
|
+
// shifts every downstream source-map offset by the same amount (manifests
|
|
46
|
+
// as hover/go-to-definition spans landing past the start of any identifier
|
|
47
|
+
// that follows an escaped backtick or `${{` in the same template, e.g.
|
|
48
|
+
// hyphenated keywords used after backtick-quoted text in a comment). The
|
|
49
|
+
// cooked `text` reverses those escapes, restoring 1:1 correspondence with
|
|
50
|
+
// the original source.
|
|
51
|
+
let template = node.template.text;
|
|
40
52
|
|
|
41
53
|
// environment-specific transforms may emit templateLocation in meta, in
|
|
42
54
|
// which case we use that. Otherwise we use the reported location from the
|