@backtickjs/compiler 0.2.5 → 0.2.6

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.
@@ -0,0 +1,2 @@
1
+ import type ts from "typescript";
2
+ export declare function programOf(ts: typeof import("typescript"), file: ts.SourceFile): ts.Program;
@@ -0,0 +1,17 @@
1
+ // A program of the one file: no libraries, as only the file's own bindings
2
+ // are asked about.
3
+ export function programOf(ts, file) {
4
+ const host = {
5
+ getSourceFile: (name) => (name === file.fileName ? file : undefined),
6
+ getDefaultLibFileName: () => "lib.d.ts",
7
+ writeFile: () => { },
8
+ getCurrentDirectory: () => "/",
9
+ getCanonicalFileName: (name) => name,
10
+ useCaseSensitiveFileNames: () => true,
11
+ getNewLine: () => "\n",
12
+ fileExists: (name) => name === file.fileName,
13
+ readFile: () => undefined,
14
+ };
15
+ return ts.createProgram([file.fileName], { noLib: true, noResolve: true, types: [], jsx: ts.JsxEmit.Preserve }, host);
16
+ }
17
+ //# sourceMappingURL=programOf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programOf.js","sourceRoot":"","sources":["../src/programOf.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,mBAAmB;AACnB,MAAM,UAAU,SAAS,CACvB,EAA+B,EAC/B,IAAmB;IAEnB,MAAM,IAAI,GAAoB;QAC5B,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,qBAAqB,EAAE,GAAG,EAAE,CAAC,UAAU;QACvC,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;QACnB,mBAAmB,EAAE,GAAG,EAAE,CAAC,GAAG;QAC9B,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;QACpC,yBAAyB,EAAE,GAAG,EAAE,CAAC,IAAI;QACrC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI;QACtB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ;QAC5C,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;KAC1B,CAAC;IACF,OAAO,EAAE,CAAC,aAAa,CACrB,CAAC,IAAI,CAAC,QAAQ,CAAC,EACf,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EACrE,IAAI,CACL,CAAC;AACJ,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { inTypePosition } from "./inTypePosition.js";
2
+ import { programOf } from "./programOf.js";
2
3
  export function resolveBindings(ts, { sourceFile, scripts }, fileHash) {
3
4
  const combined = combine(ts, sourceFile, scripts);
4
5
  const file = ts.createSourceFile(sourceFile.fileName, combined.text, ts.ScriptTarget.Latest, true);
5
- const checker = checkerOf(ts, file);
6
+ const checker = programOf(ts, file).getTypeChecker();
6
7
  const binding = ts.SymbolFlags.Variable | ts.SymbolFlags.Function | ts.SymbolFlags.Class;
7
8
  // what the host declares by a name: the above, an enum, a namespace, an import
8
9
  const hostBinding = binding |
@@ -213,24 +214,6 @@ function combine(ts, sourceFile, scripts) {
213
214
  host(sourceFile.text.length);
214
215
  return combined;
215
216
  }
216
- // A checker over the one file: no libraries, as only the file's own
217
- // bindings are asked about.
218
- function checkerOf(ts, file) {
219
- const host = {
220
- getSourceFile: (name) => (name === file.fileName ? file : undefined),
221
- getDefaultLibFileName: () => "lib.d.ts",
222
- writeFile: () => { },
223
- getCurrentDirectory: () => "/",
224
- getCanonicalFileName: (name) => name,
225
- useCaseSensitiveFileNames: () => true,
226
- getNewLine: () => "\n",
227
- fileExists: (name) => name === file.fileName,
228
- readFile: () => undefined,
229
- };
230
- return ts
231
- .createProgram([file.fileName], { noLib: true, noResolve: true, types: [], jsx: ts.JsxEmit.Preserve }, host)
232
- .getTypeChecker();
233
- }
234
217
  function inGlobalAugmentation(ts, declaration) {
235
218
  for (let node = declaration; node; node = node.parent) {
236
219
  if (ts.isModuleDeclaration(node) &&
@@ -1 +1 @@
1
- {"version":3,"file":"resolveBindings.js","sourceRoot":"","sources":["../src/resolveBindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveBindings.js","sourceRoot":"","sources":["../src/resolveBindings.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { hashText } from "./hashText.js";
3
3
  import { hostElementDiagnostics } from "./hostElements.js";
4
4
  import { resolveBindings } from "./resolveBindings.js";
5
5
  import { rewriteScript } from "./rewriteScript.js";
6
+ import { splicesReadEarly } from "./splicesReadEarly.js";
6
7
  export function rewriteFile(ts, parsedFile) {
7
8
  const sourceFile = parsedFile.sourceFile;
8
9
  const scripts = new Map();
@@ -17,6 +18,7 @@ export function rewriteFile(ts, parsedFile) {
17
18
  diagnostics.push(...rewritten.diagnostics);
18
19
  }
19
20
  diagnostics.push(...hostElementDiagnostics(ts, sourceFile));
21
+ diagnostics.push(...splicesReadEarly(ts, parsedFile));
20
22
  return { sourceFile, scripts, bindings, hostReferences, diagnostics };
21
23
  }
22
24
  //# sourceMappingURL=rewriteFile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rewriteFile.js","sourceRoot":"","sources":["../src/rewriteFile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAA0B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAwB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYzE,MAAM,UAAU,WAAW,CACzB,EAA+B,EAC/B,UAAsB;IAEtB,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgD,CAAC;IACxE,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,eAAe,CAC1D,EAAE,EACF,UAAU,EACV,QAAQ,CACT,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,aAAa,CAC7B,EAAE,EACF,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAE5D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"rewriteFile.js","sourceRoot":"","sources":["../src/rewriteFile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAA0B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAwB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAYzD,MAAM,UAAU,WAAW,CACzB,EAA+B,EAC/B,UAAsB;IAEtB,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgD,CAAC;IACxE,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,eAAe,CAC1D,EAAE,EACF,UAAU,EACV,QAAQ,CACT,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,aAAa,CAC7B,EAAE,EACF,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5D,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAEtD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AACxE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Diagnostic } from "./diagnostics.js";
2
+ import type { ParsedFile } from "./parseFile.js";
3
+ /**
4
+ * Splices that read a host binding before its declaration, as TypeScript
5
+ * reports it. A splice is read when its `cs` line runs, as a template's spans
6
+ * are, so in the host file as written TypeScript already reads each `${…}`
7
+ * where it runs. Only `$name` is template text: it's checked as `${name}`.
8
+ *
9
+ * The virtual code checks a splice where the script reads it, which is right
10
+ * outside the script's functions, where TypeScript reports it already. In
11
+ * one, TypeScript takes the read as made when the function is called: only
12
+ * those are reported here.
13
+ */
14
+ export declare function splicesReadEarly(ts: typeof import("typescript"), { sourceFile, scripts }: ParsedFile): Diagnostic[];
@@ -0,0 +1,93 @@
1
+ import { programOf } from "./programOf.js";
2
+ // TypeScript's codes for a `const`, `let`, class or enum used before its
3
+ // declaration.
4
+ const USED_BEFORE_DECLARATION = new Set([2448, 2449, 2450]);
5
+ /**
6
+ * Splices that read a host binding before its declaration, as TypeScript
7
+ * reports it. A splice is read when its `cs` line runs, as a template's spans
8
+ * are, so in the host file as written TypeScript already reads each `${…}`
9
+ * where it runs. Only `$name` is template text: it's checked as `${name}`.
10
+ *
11
+ * The virtual code checks a splice where the script reads it, which is right
12
+ * outside the script's functions, where TypeScript reports it already. In
13
+ * one, TypeScript takes the read as made when the function is called: only
14
+ * those are reported here.
15
+ */
16
+ export function splicesReadEarly(ts, { sourceFile, scripts }) {
17
+ // Each splice's host code, and whether a script reads it in a function of
18
+ // its own, the splice's script or one it's nested in.
19
+ const splices = [];
20
+ // Each `$name`, and the name.
21
+ const unbraced = [];
22
+ const visit = (script, inFunction) => {
23
+ for (const splice of Object.values(script.splices)) {
24
+ const read = inFunction ||
25
+ splice.refs.some((ref) => ts.findAncestor(ref, ts.isFunctionLike));
26
+ if (splice.kind === "braced") {
27
+ const start = splice.expression.getStart(sourceFile);
28
+ splices.push({
29
+ start,
30
+ end: splice.expression.getEnd(),
31
+ inFunction: read,
32
+ });
33
+ splice.scripts.forEach((nested) => visit(nested, read));
34
+ }
35
+ else {
36
+ const { start, end } = script.toSourceRange(splice.refs[0]);
37
+ splices.push({ start, end, inFunction: read });
38
+ unbraced.push({ start, end, name: splice.expression.text });
39
+ }
40
+ }
41
+ };
42
+ scripts.forEach((script) => visit(script, false));
43
+ unbraced.sort((a, b) => a.start - b.start);
44
+ let text = "";
45
+ let at = 0;
46
+ for (const { start, end, name } of unbraced) {
47
+ text += `${sourceFile.text.slice(at, start)}\${${name}}`;
48
+ at = end;
49
+ }
50
+ text += sourceFile.text.slice(at);
51
+ // Where a range of the text is in the host file: each `${name}` is two
52
+ // longer than its `$name`, and a range in one is the `$name`.
53
+ const toSource = (from, to) => {
54
+ let shift = 0;
55
+ for (const { start, end } of unbraced) {
56
+ if (from < start + shift) {
57
+ break;
58
+ }
59
+ if (from < end + shift + 2) {
60
+ return { start, end };
61
+ }
62
+ shift += 2;
63
+ }
64
+ return { start: from - shift, end: to - shift };
65
+ };
66
+ const file = ts.createSourceFile(sourceFile.fileName, text, ts.ScriptTarget.Latest, true);
67
+ return programOf(ts, file)
68
+ .getSemanticDiagnostics(file)
69
+ .flatMap((diagnostic) => {
70
+ if (!USED_BEFORE_DECLARATION.has(diagnostic.code)) {
71
+ return [];
72
+ }
73
+ const range = toSource(diagnostic.start, diagnostic.start + diagnostic.length);
74
+ // The innermost splice it's in.
75
+ const splice = splices
76
+ .filter((each) => range.start >= each.start && range.start < each.end)
77
+ .sort((a, b) => a.end - a.start - (b.end - b.start))[0];
78
+ if (splice === undefined || !splice.inFunction) {
79
+ return [];
80
+ }
81
+ return [
82
+ {
83
+ range,
84
+ message: ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n") +
85
+ " A splice is read when the `cs` line runs, even in a function " +
86
+ "of the script.",
87
+ category: ts.DiagnosticCategory.Error,
88
+ code: diagnostic.code,
89
+ },
90
+ ];
91
+ });
92
+ }
93
+ //# sourceMappingURL=splicesReadEarly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splicesReadEarly.js","sourceRoot":"","sources":["../src/splicesReadEarly.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backtickjs/compiler",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "description": "Internal: the compiler for Backtick client scripts, used by the build plugins, backtick-tsc and the editor tooling",
5
5
  "keywords": [
6
6
  "backtick",
@@ -46,7 +46,7 @@
46
46
  "@jridgewell/trace-mapping": "^0.3.31"
47
47
  },
48
48
  "devDependencies": {
49
- "@backtickjs/core": "^0.2.5",
49
+ "@backtickjs/core": "^0.2.6",
50
50
  "prettier": "^3.6.2",
51
51
  "typescript": "^6.0.3"
52
52
  },
@@ -0,0 +1,25 @@
1
+ import type ts from "typescript";
2
+
3
+ // A program of the one file: no libraries, as only the file's own bindings
4
+ // are asked about.
5
+ export function programOf(
6
+ ts: typeof import("typescript"),
7
+ file: ts.SourceFile,
8
+ ): ts.Program {
9
+ const host: ts.CompilerHost = {
10
+ getSourceFile: (name) => (name === file.fileName ? file : undefined),
11
+ getDefaultLibFileName: () => "lib.d.ts",
12
+ writeFile: () => {},
13
+ getCurrentDirectory: () => "/",
14
+ getCanonicalFileName: (name) => name,
15
+ useCaseSensitiveFileNames: () => true,
16
+ getNewLine: () => "\n",
17
+ fileExists: (name) => name === file.fileName,
18
+ readFile: () => undefined,
19
+ };
20
+ return ts.createProgram(
21
+ [file.fileName],
22
+ { noLib: true, noResolve: true, types: [], jsx: ts.JsxEmit.Preserve },
23
+ host,
24
+ );
25
+ }
@@ -1,6 +1,7 @@
1
1
  import type ts from "typescript";
2
2
  import { inTypePosition } from "./inTypePosition.js";
3
3
  import type { ClientScript, ParsedFile } from "./parseFile.js";
4
+ import { programOf } from "./programOf.js";
4
5
 
5
6
  /**
6
7
  * Every client script in a file, its scopes resolved by TypeScript's checker,
@@ -131,7 +132,7 @@ export function resolveBindings(
131
132
  ts.ScriptTarget.Latest,
132
133
  true,
133
134
  );
134
- const checker = checkerOf(ts, file);
135
+ const checker = programOf(ts, file).getTypeChecker();
135
136
  const binding =
136
137
  ts.SymbolFlags.Variable | ts.SymbolFlags.Function | ts.SymbolFlags.Class;
137
138
  // what the host declares by a name: the above, an enum, a namespace, an import
@@ -384,32 +385,6 @@ function combine(
384
385
  return combined;
385
386
  }
386
387
 
387
- // A checker over the one file: no libraries, as only the file's own
388
- // bindings are asked about.
389
- function checkerOf(
390
- ts: typeof import("typescript"),
391
- file: ts.SourceFile,
392
- ): ts.TypeChecker {
393
- const host: ts.CompilerHost = {
394
- getSourceFile: (name) => (name === file.fileName ? file : undefined),
395
- getDefaultLibFileName: () => "lib.d.ts",
396
- writeFile: () => {},
397
- getCurrentDirectory: () => "/",
398
- getCanonicalFileName: (name) => name,
399
- useCaseSensitiveFileNames: () => true,
400
- getNewLine: () => "\n",
401
- fileExists: (name) => name === file.fileName,
402
- readFile: () => undefined,
403
- };
404
- return ts
405
- .createProgram(
406
- [file.fileName],
407
- { noLib: true, noResolve: true, types: [], jsx: ts.JsxEmit.Preserve },
408
- host,
409
- )
410
- .getTypeChecker();
411
- }
412
-
413
388
  function inGlobalAugmentation(
414
389
  ts: typeof import("typescript"),
415
390
  declaration: ts.Declaration,
@@ -6,6 +6,7 @@ import { hostElementDiagnostics } from "./hostElements.js";
6
6
  import type { ParsedFile } from "./parseFile.js";
7
7
  import { type BindingResolution, resolveBindings } from "./resolveBindings.js";
8
8
  import { type RewrittenScript, rewriteScript } from "./rewriteScript.js";
9
+ import { splicesReadEarly } from "./splicesReadEarly.js";
9
10
 
10
11
  export interface RewrittenFile {
11
12
  sourceFile: ts.SourceFile;
@@ -49,6 +50,7 @@ export function rewriteFile(
49
50
  }
50
51
 
51
52
  diagnostics.push(...hostElementDiagnostics(ts, sourceFile));
53
+ diagnostics.push(...splicesReadEarly(ts, parsedFile));
52
54
 
53
55
  return { sourceFile, scripts, bindings, hostReferences, diagnostics };
54
56
  }
@@ -0,0 +1,112 @@
1
+ import type ts from "typescript";
2
+ import type { Diagnostic } from "./diagnostics.js";
3
+ import type { ClientScript, ParsedFile } from "./parseFile.js";
4
+ import { programOf } from "./programOf.js";
5
+
6
+ // TypeScript's codes for a `const`, `let`, class or enum used before its
7
+ // declaration.
8
+ const USED_BEFORE_DECLARATION = new Set([2448, 2449, 2450]);
9
+
10
+ /**
11
+ * Splices that read a host binding before its declaration, as TypeScript
12
+ * reports it. A splice is read when its `cs` line runs, as a template's spans
13
+ * are, so in the host file as written TypeScript already reads each `${…}`
14
+ * where it runs. Only `$name` is template text: it's checked as `${name}`.
15
+ *
16
+ * The virtual code checks a splice where the script reads it, which is right
17
+ * outside the script's functions, where TypeScript reports it already. In
18
+ * one, TypeScript takes the read as made when the function is called: only
19
+ * those are reported here.
20
+ */
21
+ export function splicesReadEarly(
22
+ ts: typeof import("typescript"),
23
+ { sourceFile, scripts }: ParsedFile,
24
+ ): Diagnostic[] {
25
+ // Each splice's host code, and whether a script reads it in a function of
26
+ // its own, the splice's script or one it's nested in.
27
+ const splices: { start: number; end: number; inFunction: boolean }[] = [];
28
+ // Each `$name`, and the name.
29
+ const unbraced: { start: number; end: number; name: string }[] = [];
30
+ const visit = (script: ClientScript, inFunction: boolean): void => {
31
+ for (const splice of Object.values(script.splices)) {
32
+ const read =
33
+ inFunction ||
34
+ splice.refs.some((ref) => ts.findAncestor(ref, ts.isFunctionLike));
35
+ if (splice.kind === "braced") {
36
+ const start = splice.expression.getStart(sourceFile);
37
+ splices.push({
38
+ start,
39
+ end: splice.expression.getEnd(),
40
+ inFunction: read,
41
+ });
42
+ splice.scripts.forEach((nested) => visit(nested, read));
43
+ } else {
44
+ const { start, end } = script.toSourceRange(splice.refs[0]!);
45
+ splices.push({ start, end, inFunction: read });
46
+ unbraced.push({ start, end, name: splice.expression.text });
47
+ }
48
+ }
49
+ };
50
+ scripts.forEach((script) => visit(script, false));
51
+ unbraced.sort((a, b) => a.start - b.start);
52
+
53
+ let text = "";
54
+ let at = 0;
55
+ for (const { start, end, name } of unbraced) {
56
+ text += `${sourceFile.text.slice(at, start)}\${${name}}`;
57
+ at = end;
58
+ }
59
+ text += sourceFile.text.slice(at);
60
+
61
+ // Where a range of the text is in the host file: each `${name}` is two
62
+ // longer than its `$name`, and a range in one is the `$name`.
63
+ const toSource = (from: number, to: number) => {
64
+ let shift = 0;
65
+ for (const { start, end } of unbraced) {
66
+ if (from < start + shift) {
67
+ break;
68
+ }
69
+ if (from < end + shift + 2) {
70
+ return { start, end };
71
+ }
72
+ shift += 2;
73
+ }
74
+ return { start: from - shift, end: to - shift };
75
+ };
76
+
77
+ const file = ts.createSourceFile(
78
+ sourceFile.fileName,
79
+ text,
80
+ ts.ScriptTarget.Latest,
81
+ true,
82
+ );
83
+ return programOf(ts, file)
84
+ .getSemanticDiagnostics(file)
85
+ .flatMap((diagnostic) => {
86
+ if (!USED_BEFORE_DECLARATION.has(diagnostic.code)) {
87
+ return [];
88
+ }
89
+ const range = toSource(
90
+ diagnostic.start!,
91
+ diagnostic.start! + diagnostic.length!,
92
+ );
93
+ // The innermost splice it's in.
94
+ const splice = splices
95
+ .filter((each) => range.start >= each.start && range.start < each.end)
96
+ .sort((a, b) => a.end - a.start - (b.end - b.start))[0];
97
+ if (splice === undefined || !splice.inFunction) {
98
+ return [];
99
+ }
100
+ return [
101
+ {
102
+ range,
103
+ message:
104
+ ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n") +
105
+ " A splice is read when the `cs` line runs, even in a function " +
106
+ "of the script.",
107
+ category: ts.DiagnosticCategory.Error,
108
+ code: diagnostic.code,
109
+ },
110
+ ];
111
+ });
112
+ }