@azerothjs/language-server 0.5.0-beta.1 → 0.6.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 CHANGED
@@ -13,7 +13,11 @@ repository, among others) launch this server and talk to it over stdio.
13
13
 
14
14
  ## Architecture
15
15
 
16
- The server holds one `AzerothLanguageService` for the workspace and a
16
+ The server holds one `AzerothLanguageService` **per workspace root** (multi-root
17
+ aware: each document resolves against the service whose root is its longest
18
+ matching prefix — its nearest project — so files in different roots type-check
19
+ against their own `tsconfig`; roots added/removed at runtime are tracked via
20
+ `workspace/didChangeWorkspaceFolders`) and a
17
21
  document manager (`vscode-languageserver`'s `TextDocuments`). Text changes are
18
22
  mirrored into the service with `didOpen`/`didChange`/`didClose`, and each LSP
19
23
  request handler calls the matching service method and returns the result almost
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ /** Options controlling a single docgen run. */
3
+ export interface DocgenOptions {
4
+ /** Directory to search for `.azeroth` files (default: cwd). */
5
+ cwd?: string;
6
+ /** Explicit tsconfig path; otherwise the nearest one is used. */
7
+ project?: string;
8
+ /** Directory to write one `.md` per component into; omitted -> stdout. */
9
+ out?: string;
10
+ /** With `--out`, emit a browsable static HTML site instead of `.md` files. */
11
+ html?: boolean;
12
+ /** Sink for stdout output (default: process.stdout). */
13
+ write?: (text: string) => void;
14
+ /**
15
+ * Sink for files the run would write, keyed by absolute path. When given, the
16
+ * run captures content here instead of touching disk (so tests need no temp
17
+ * dir); omitted -> real {@link writeFileSync}.
18
+ */
19
+ writeFile?: (filePath: string, content: string) => void;
20
+ }
21
+ /** Outcome of a docgen run. */
22
+ export interface DocgenResult {
23
+ /** Number of `.azeroth` files documented. */
24
+ fileCount: number;
25
+ }
26
+ /** Parses the argv subset this CLI understands into {@link DocgenOptions}. */
27
+ export declare function parseArgs(argv: string[]): DocgenOptions;
28
+ /**
29
+ * Documents every `.azeroth` file under `cwd`. With no `--out` the markdown is
30
+ * printed to stdout, each file under a `<!-- file: rel/path -->` header; with
31
+ * `--out` one `.md` per component is written there instead. Returns the file
32
+ * count; the caller decides the process exit code.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * const { fileCount } = runDocgen({ cwd: 'app', out: 'docs' });
37
+ * ```
38
+ */
39
+ export declare function runDocgen(options?: DocgenOptions): DocgenResult;
40
+ //# sourceMappingURL=docgen-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docgen-cli.d.ts","sourceRoot":"","sources":["../src/docgen-cli.ts"],"names":[],"mappings":";AAeA,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAE1B,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,8EAA8E;IAC9E,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,wDAAwD;IACxD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/B;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D;AAED,+BAA+B;AAC/B,MAAM,WAAW,YAAY;IAEzB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAgCvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,YAAY,CA+EnE"}
@@ -0,0 +1,232 @@
1
+ #!/usr/bin/env node
2
+ // azeroth-docgen: renders a markdown API reference for every `.azeroth`
3
+ // component under a directory. It builds the same combined program azeroth-tsc
4
+ // uses (so prop types resolve against the project's REAL tsconfig types), opens
5
+ // each file in the language service, and asks the docgen module for that file's
6
+ // markdown. With no `--out` the docs print to stdout under a per-file header; an
7
+ // `--out` directory writes one `.md` per component instead. The heavy lifting
8
+ // lives in the testable `runDocgen`; the bin shim is a thin argv parse.
9
+ import path from 'node:path';
10
+ import { pathToFileURL } from 'node:url';
11
+ import { mkdirSync, writeFileSync } from 'node:fs';
12
+ import ts from 'typescript';
13
+ import { AzerothLanguageService, generateComponentDocs, pathToUri } from '@azerothjs/language-service';
14
+ /** Parses the argv subset this CLI understands into {@link DocgenOptions}. */
15
+ export function parseArgs(argv) {
16
+ const options = {};
17
+ for (let i = 0; i < argv.length; i++) {
18
+ const arg = argv[i];
19
+ if (arg === '--project' || arg === '-p') {
20
+ options.project = argv[++i];
21
+ }
22
+ else if (arg.startsWith('--project=')) {
23
+ options.project = arg.slice('--project='.length);
24
+ }
25
+ else if (arg === '--out' || arg === '-o') {
26
+ options.out = argv[++i];
27
+ }
28
+ else if (arg.startsWith('--out=')) {
29
+ options.out = arg.slice('--out='.length);
30
+ }
31
+ else if (arg === '--html') {
32
+ options.html = true;
33
+ }
34
+ else if (!arg.startsWith('-')) {
35
+ options.cwd = arg;
36
+ }
37
+ }
38
+ return options;
39
+ }
40
+ /**
41
+ * Documents every `.azeroth` file under `cwd`. With no `--out` the markdown is
42
+ * printed to stdout, each file under a `<!-- file: rel/path -->` header; with
43
+ * `--out` one `.md` per component is written there instead. Returns the file
44
+ * count; the caller decides the process exit code.
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * const { fileCount } = runDocgen({ cwd: 'app', out: 'docs' });
49
+ * ```
50
+ */
51
+ export function runDocgen(options = {}) {
52
+ const cwd = path.resolve(options.cwd ?? process.cwd());
53
+ const write = options.write ?? ((text) => {
54
+ process.stdout.write(text);
55
+ });
56
+ const writeFile = options.writeFile ?? ((filePath, content) => {
57
+ writeFileSync(filePath, content);
58
+ });
59
+ // rootProjectFiles: pull the project's real `.ts` files into the same
60
+ // program as the `.azeroth` virtual modules, so prop types that reference
61
+ // `.ts`-declared types resolve to real types rather than `any`.
62
+ const service = new AzerothLanguageService(cwd, options.project, { rootProjectFiles: true });
63
+ const files = ts.sys.readDirectory(cwd, ['.azeroth'], ['**/node_modules/**', '**/dist/**', '**/.git/**'], ['**/*.azeroth']);
64
+ const outDir = options.out ? path.resolve(cwd, options.out) : undefined;
65
+ // Only create the directory for real disk writes; a `writeFile` sink (tests)
66
+ // captures content in memory and must not leave an empty dir behind.
67
+ if (outDir && !options.writeFile) {
68
+ mkdirSync(outDir, { recursive: true });
69
+ }
70
+ // pages: collected only for the HTML index, so it links every component page.
71
+ const pages = [];
72
+ let fileCount = 0;
73
+ for (const file of files) {
74
+ const source = ts.sys.readFile(file);
75
+ if (source === undefined) {
76
+ continue;
77
+ }
78
+ const uri = pathToUri(file);
79
+ service.didOpen(uri, source);
80
+ const markdown = generateComponentDocs(service, uri);
81
+ fileCount++;
82
+ if (outDir && options.html) {
83
+ const base = path.basename(file).replace(/\.azeroth$/, '');
84
+ writeFile(path.join(outDir, `${base}.html`), renderHtmlPage(markdown));
85
+ pages.push({ name: componentName(markdown) ?? base, file: `${base}.html` });
86
+ }
87
+ else if (outDir) {
88
+ const base = path.basename(file).replace(/\.azeroth$/, '');
89
+ writeFile(path.join(outDir, `${base}.md`), markdown);
90
+ }
91
+ else {
92
+ const rel = path.relative(cwd, file).replace(/\\/g, '/');
93
+ write(`<!-- file: ${rel} -->\n${markdown}\n`);
94
+ }
95
+ }
96
+ if (outDir && options.html) {
97
+ writeFile(path.join(outDir, 'index.html'), renderHtmlIndex(pages));
98
+ }
99
+ if (outDir) {
100
+ const rel = path.relative(cwd, outDir).replace(/\\/g, '/') || '.';
101
+ write(`Wrote ${fileCount} doc(s) to ${rel}.\n`);
102
+ }
103
+ return { fileCount };
104
+ }
105
+ /** The h1 text (`# Name`) of a docgen markdown block, or null when absent. */
106
+ function componentName(markdown) {
107
+ const match = markdown.match(/^# (.+)$/m);
108
+ return match ? match[1].trim() : null;
109
+ }
110
+ /**
111
+ * Converts ONE docgen markdown block to an HTML body fragment. This is not a
112
+ * general markdown parser: docgen's output is a known, narrow shape (`# h1`, an
113
+ * optional paragraph, a `## Props` h2, then either a sentence or a GFM pipe
114
+ * table), so a line walk over those exact forms is enough - and keeps the CLI
115
+ * dependency-free.
116
+ */
117
+ function markdownToHtml(markdown) {
118
+ const lines = markdown.replace(/\r\n/g, '\n').split('\n');
119
+ const html = [];
120
+ for (let i = 0; i < lines.length; i++) {
121
+ const line = lines[i];
122
+ if (line === '') {
123
+ continue;
124
+ }
125
+ if (line.startsWith('# ')) {
126
+ html.push(`<h1>${inline(line.slice(2))}</h1>`);
127
+ }
128
+ else if (line.startsWith('## ')) {
129
+ html.push(`<h2>${inline(line.slice(3))}</h2>`);
130
+ }
131
+ else if (isTableRow(line) && isSeparatorRow(lines[i + 1] ?? '')) {
132
+ // A GFM table: this header row, the separator we just matched, then
133
+ // every following pipe row until the block ends.
134
+ const header = tableCells(line);
135
+ const rows = [];
136
+ i += 2;
137
+ for (; i < lines.length && isTableRow(lines[i]); i++) {
138
+ rows.push(tableCells(lines[i]));
139
+ }
140
+ i--;
141
+ html.push(renderTable(header, rows));
142
+ }
143
+ else {
144
+ html.push(`<p>${inline(line)}</p>`);
145
+ }
146
+ }
147
+ return html.join('\n');
148
+ }
149
+ /** True for a line that is a pipe-delimited table row. */
150
+ function isTableRow(line) {
151
+ return /^\s*\|.*\|\s*$/.test(line);
152
+ }
153
+ /** True for a GFM header separator row (`| --- | --- |`). */
154
+ function isSeparatorRow(line) {
155
+ return isTableRow(line) && /^[\s|:-]+$/.test(line);
156
+ }
157
+ /** Splits a `| a | b |` row into its trimmed inner cells. */
158
+ function tableCells(line) {
159
+ return line.trim().replace(/^\||\|$/g, '').split('|').map(cell => cell.trim());
160
+ }
161
+ /** Renders a header row + body rows as an HTML `<table>`. */
162
+ function renderTable(header, rows) {
163
+ const head = header.map(cell => `<th>${inline(cell)}</th>`).join('');
164
+ const body = rows
165
+ .map(row => `<tr>${row.map(cell => `<td>${inline(cell)}</td>`).join('')}</tr>`)
166
+ .join('\n');
167
+ return `<table>\n<thead><tr>${head}</tr></thead>\n<tbody>\n${body}\n</tbody>\n</table>`;
168
+ }
169
+ /**
170
+ * Renders docgen's inline markdown - `code` and `**bold**` - to HTML, escaping
171
+ * everything else. Backticks bind first so a `**` inside code stays literal.
172
+ */
173
+ function inline(text) {
174
+ const parts = text.split(/(`[^`]*`)/);
175
+ return parts
176
+ .map(part => {
177
+ if (part.startsWith('`') && part.endsWith('`') && part.length >= 2) {
178
+ return `<code>${escapeHtml(part.slice(1, -1))}</code>`;
179
+ }
180
+ return escapeHtml(part).replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
181
+ })
182
+ .join('');
183
+ }
184
+ /** Escapes the five characters that are unsafe in HTML text/attributes. */
185
+ function escapeHtml(text) {
186
+ return text
187
+ .replace(/&/g, '&amp;')
188
+ .replace(/</g, '&lt;')
189
+ .replace(/>/g, '&gt;')
190
+ .replace(/"/g, '&quot;')
191
+ .replace(/'/g, '&#39;');
192
+ }
193
+ /** The shared inline stylesheet for every generated page. */
194
+ const PAGE_STYLE = 'body{font:16px/1.6 system-ui,sans-serif;max-width:48rem;margin:2rem auto;padding:0 1rem;color:#1b1b1f}'
195
+ + 'h1{border-bottom:1px solid #ddd;padding-bottom:.3rem}'
196
+ + 'table{border-collapse:collapse;width:100%}'
197
+ + 'th,td{border:1px solid #ddd;padding:.4rem .6rem;text-align:left}'
198
+ + 'th{background:#f6f6f7}'
199
+ + 'code{background:#f0f0f2;padding:.1rem .3rem;border-radius:3px;font-size:.9em}'
200
+ + 'a{color:#3056d3}';
201
+ /** Wraps an HTML body fragment in a minimal styled standalone page. */
202
+ function htmlDocument(title, body) {
203
+ return '<!DOCTYPE html>\n'
204
+ + '<html lang="en">\n'
205
+ + '<head>\n'
206
+ + '<meta charset="utf-8">\n'
207
+ + '<meta name="viewport" content="width=device-width, initial-scale=1">\n'
208
+ + `<title>${escapeHtml(title)}</title>\n`
209
+ + `<style>${PAGE_STYLE}</style>\n`
210
+ + '</head>\n'
211
+ + `<body>\n${body}\n</body>\n`
212
+ + '</html>\n';
213
+ }
214
+ /** Renders one component's docgen markdown as a full HTML page. */
215
+ function renderHtmlPage(markdown) {
216
+ return htmlDocument(componentName(markdown) ?? 'Component', markdownToHtml(markdown));
217
+ }
218
+ /** Renders the site landing page linking every component page. */
219
+ function renderHtmlIndex(pages) {
220
+ const items = pages
221
+ .map(page => `<li><a href="${escapeHtml(page.file)}">${escapeHtml(page.name)}</a></li>`)
222
+ .join('\n');
223
+ const body = `<h1>API Reference</h1>\n<ul>\n${items}\n</ul>`;
224
+ return htmlDocument('API Reference', body);
225
+ }
226
+ // Bin entry: only when this module is the process's launched script (not when
227
+ // it is imported for `runDocgen`). All behaviour lives in the testable
228
+ // `runDocgen` above.
229
+ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
230
+ runDocgen(parseArgs(process.argv.slice(2)));
231
+ }
232
+ //# sourceMappingURL=docgen-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docgen-cli.js","sourceRoot":"","sources":["../src/docgen-cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
- export { startServer } from './server.ts';
1
+ export { startServer, parseSettings, type AzerothSettings, type FeatureToggles } from './server.ts';
2
2
  export { runTsc, watchTsc, parseArgs, type TscOptions, type TscResult, type TscWatcher } from './tsc.ts';
3
+ export { runDocgen, type DocgenOptions, type DocgenResult } from './docgen-cli.ts';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACzG,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@
4
4
  // (`azeroth-language-server`) runs `startServer()` over stdio; this entry point
5
5
  // re-exports it so the server can also be embedded (e.g. in a web worker host
6
6
  // or an integration test that drives it through an in-memory connection).
7
- export { startServer } from "./server.js";
7
+ export { startServer, parseSettings } from "./server.js";
8
8
  export { runTsc, watchTsc, parseArgs } from "./tsc.js";
9
+ export { runDocgen } from "./docgen-cli.js";
9
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,0EAA0E;AAE1E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAoD,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,0EAA0E;AAE1E,OAAO,EAAE,WAAW,EAAE,aAAa,EAA6C,MAAM,aAAa,CAAC;AACpG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAoD,MAAM,UAAU,CAAC;AACzG,OAAO,EAAE,SAAS,EAAyC,MAAM,iBAAiB,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,4 +1,54 @@
1
1
  import { type Connection } from 'vscode-languageserver/node.js';
2
+ import { type CompletionOptions, type InlayHintOptions } from '@azerothjs/language-service';
3
+ /** All `azeroth.*` settings, resolved with defaults. */
4
+ export interface AzerothSettings {
5
+ diagnostics: {
6
+ enable: boolean;
7
+ };
8
+ format: {
9
+ enable: boolean;
10
+ };
11
+ autoClosingTags: boolean;
12
+ suggest: CompletionOptions;
13
+ inlayHints: InlayHintOptions;
14
+ features: FeatureToggles;
15
+ }
16
+ /**
17
+ * Per-feature on/off switches. Every LSP capability the server advertises can be
18
+ * disabled independently (`azeroth.<feature>.enable: false`), so a user or a
19
+ * project can trim the language experience without disabling the whole server.
20
+ * Gating happens in the request handlers (return empty) rather than by dropping
21
+ * the capability, so toggling takes effect live on the next config change.
22
+ */
23
+ export interface FeatureToggles {
24
+ completion: boolean;
25
+ hover: boolean;
26
+ definition: boolean;
27
+ typeDefinition: boolean;
28
+ references: boolean;
29
+ documentHighlight: boolean;
30
+ rename: boolean;
31
+ documentSymbol: boolean;
32
+ workspaceSymbol: boolean;
33
+ signatureHelp: boolean;
34
+ semanticTokens: boolean;
35
+ codeActions: boolean;
36
+ folding: boolean;
37
+ selectionRange: boolean;
38
+ onTypeFormatting: boolean;
39
+ linkedEditing: boolean;
40
+ callHierarchy: boolean;
41
+ codeLens: boolean;
42
+ documentLinks: boolean;
43
+ documentColor: boolean;
44
+ }
45
+ /**
46
+ * Resolves an `azeroth.*` client-config blob into a complete {@link AzerothSettings},
47
+ * applying every default for absent/malformed keys. Pure and total (never throws),
48
+ * so it is unit-testable in isolation from the LSP connection. Every value follows
49
+ * the "on unless explicitly `false`" convention, so a partial config is safe.
50
+ */
51
+ export declare function parseSettings(cfg: Record<string, unknown> | undefined): AzerothSettings;
2
52
  /**
3
53
  * Wires an AzerothJS language server onto an LSP connection. Pass a connection
4
54
  * for testing, or omit it to create the standard stdio/IPC connection (used by
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,EAKH,KAAK,UAAU,EAIlB,MAAM,+BAA+B,CAAC;AAiDvC;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,UAAU,GAAE,UAA+B,GAAG,IAAI,CAqV7E"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAcA,OAAO,EAKH,KAAK,UAAU,EAOlB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAQH,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACxB,MAAM,6BAA6B,CAAC;AAErC,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAE5B,WAAW,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IACjC,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,cAAc,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAE3B,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CAC1B;AAgCD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,eAAe,CAqDvF;AAWD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,UAAU,GAAE,UAA+B,GAAG,IAAI,CA2hB7E"}
package/dist/server.js CHANGED
@@ -8,16 +8,26 @@
8
8
  // providers - lives in the service. Keeping the protocol plumbing separate
9
9
  // means the same brain powers the LSP server, the unit tests, and any other
10
10
  // editor host.
11
- import { dirname } from 'node:path';
11
+ import { dirname, join } from 'node:path';
12
+ import { existsSync } from 'node:fs';
12
13
  import { createConnection, TextDocuments, TextDocumentSyncKind, DidChangeConfigurationNotification } from 'vscode-languageserver/node.js';
13
14
  import { TextDocument } from 'vscode-languageserver-textdocument';
14
- import { AzerothLanguageService, SEMANTIC_TOKEN_TYPES, uriToPath } from '@azerothjs/language-service';
15
+ import { AzerothLanguageService, SEMANTIC_TOKEN_TYPES, SEMANTIC_TOKEN_MODIFIERS, uriToPath } from '@azerothjs/language-service';
16
+ /** Every feature on - the experience an editor gets before any opt-out. */
17
+ const ALL_FEATURES_ON = {
18
+ completion: true, hover: true, definition: true, typeDefinition: true,
19
+ references: true, documentHighlight: true, rename: true, documentSymbol: true,
20
+ workspaceSymbol: true, signatureHelp: true, semanticTokens: true, codeActions: true,
21
+ folding: true, selectionRange: true, onTypeFormatting: true, linkedEditing: true,
22
+ callHierarchy: true, codeLens: true, documentLinks: true, documentColor: true
23
+ };
15
24
  /** Defaults applied when a setting is absent or the client can't supply config. */
16
25
  const DEFAULT_SETTINGS = {
17
26
  diagnostics: { enable: true },
18
27
  format: { enable: true },
19
28
  autoClosingTags: true,
20
29
  suggest: { autoImports: true, componentSnippets: true },
30
+ features: ALL_FEATURES_ON,
21
31
  inlayHints: {
22
32
  enabled: true,
23
33
  parameterNames: 'all',
@@ -28,11 +38,67 @@ const DEFAULT_SETTINGS = {
28
38
  enumMemberValues: true
29
39
  }
30
40
  };
41
+ /**
42
+ * Resolves an `azeroth.*` client-config blob into a complete {@link AzerothSettings},
43
+ * applying every default for absent/malformed keys. Pure and total (never throws),
44
+ * so it is unit-testable in isolation from the LSP connection. Every value follows
45
+ * the "on unless explicitly `false`" convention, so a partial config is safe.
46
+ */
47
+ export function parseSettings(cfg) {
48
+ const c = (cfg ?? {});
49
+ const obj = (v) => (typeof v === 'object' && v !== null ? v : {});
50
+ // A feature is on unless `azeroth.<feature>.enable` is explicitly false.
51
+ const featureOn = (key) => obj(c[key]).enable !== false;
52
+ const diagnostics = obj(c.diagnostics);
53
+ const format = obj(c.format);
54
+ const suggest = obj(c.suggest);
55
+ const inlay = obj(c.inlayHints);
56
+ return {
57
+ diagnostics: { enable: diagnostics.enable !== false },
58
+ format: { enable: format.enable !== false },
59
+ autoClosingTags: c.autoClosingTags !== false,
60
+ suggest: {
61
+ autoImports: suggest.autoImports !== false,
62
+ componentSnippets: suggest.componentSnippets !== false
63
+ },
64
+ features: {
65
+ completion: featureOn('completion'),
66
+ hover: featureOn('hover'),
67
+ definition: featureOn('definition'),
68
+ typeDefinition: featureOn('typeDefinition'),
69
+ references: featureOn('references'),
70
+ documentHighlight: featureOn('documentHighlight'),
71
+ rename: featureOn('rename'),
72
+ documentSymbol: featureOn('documentSymbol'),
73
+ workspaceSymbol: featureOn('workspaceSymbol'),
74
+ signatureHelp: featureOn('signatureHelp'),
75
+ semanticTokens: featureOn('semanticTokens'),
76
+ codeActions: featureOn('codeActions'),
77
+ folding: featureOn('folding'),
78
+ selectionRange: featureOn('selectionRange'),
79
+ onTypeFormatting: featureOn('onTypeFormatting'),
80
+ linkedEditing: featureOn('linkedEditing'),
81
+ callHierarchy: featureOn('callHierarchy'),
82
+ codeLens: featureOn('codeLens'),
83
+ documentLinks: featureOn('documentLinks'),
84
+ documentColor: featureOn('documentColor')
85
+ },
86
+ inlayHints: {
87
+ enabled: inlay.enabled !== false,
88
+ parameterNames: inlay.parameterNames ?? 'all',
89
+ parameterTypes: inlay.parameterTypes !== false,
90
+ variableTypes: inlay.variableTypes !== false,
91
+ propertyDeclarationTypes: inlay.propertyDeclarationTypes !== false,
92
+ functionLikeReturnTypes: inlay.functionLikeReturnTypes !== false,
93
+ enumMemberValues: inlay.enumMemberValues !== false
94
+ }
95
+ };
96
+ }
31
97
  /** The `.azeroth` extension the server is responsible for. */
32
98
  const EXTENSION = '.azeroth';
33
99
  const SEMANTIC_LEGEND = {
34
100
  tokenTypes: [...SEMANTIC_TOKEN_TYPES],
35
- tokenModifiers: []
101
+ tokenModifiers: [...SEMANTIC_TOKEN_MODIFIERS]
36
102
  };
37
103
  /**
38
104
  * Wires an AzerothJS language server onto an LSP connection. Pass a connection
@@ -48,46 +114,98 @@ const SEMANTIC_LEGEND = {
48
114
  */
49
115
  export function startServer(connection = createConnection()) {
50
116
  const documents = new TextDocuments(TextDocument);
51
- /** One language service per workspace root (created on initialize). */
52
- let service = null;
53
- /** Lazily creates/returns the service, anchored at a sensible root. */
54
- const ensureService = (anchorUri) => {
55
- if (!service) {
56
- service = new AzerothLanguageService(dirname(uriToPath(anchorUri)));
57
- }
58
- return service;
117
+ // One language service per workspace root, keyed by absolute root path. A
118
+ // document resolves against the service whose root is its longest-matching
119
+ // prefix (i.e. its nearest project); a file outside every root falls back to
120
+ // a service anchored at its own directory. This is what lets a multi-root
121
+ // workspace resolve each file against the correct tsconfig/project instead
122
+ // of forcing everything through the first folder.
123
+ const services = new Map();
124
+ let roots = [];
125
+ const norm = (path) => path.replace(/\\/g, '/').replace(/\/+$/, '');
126
+ /** Registers a workspace root and eagerly creates its service. */
127
+ const registerRoot = (rootUri) => {
128
+ const root = norm(uriToPath(rootUri));
129
+ if (!roots.includes(root)) {
130
+ roots.push(root);
131
+ if (!services.has(root)) {
132
+ services.set(root, new AzerothLanguageService(root));
133
+ }
134
+ }
135
+ };
136
+ /**
137
+ * Nearest ancestor directory of `filePath` that contains a `tsconfig.json`,
138
+ * or null if none up to the filesystem root. This is the file's real TS
139
+ * project: a monorepo opened at its parent has no tsconfig there, but each
140
+ * sub-package (`website/`, `server/`) does, and a file must resolve against
141
+ * its own - for `paths`, `types`, and the zero-config `vite/client` globals
142
+ * (`import.meta.env`, `*.png`). Anchoring on the workspace root instead would
143
+ * resolve against an empty config and wrongly flag those as errors.
144
+ */
145
+ const nearestProjectDir = (filePath) => {
146
+ let dir = norm(dirname(filePath));
147
+ while (true) {
148
+ if (existsSync(join(dir, 'tsconfig.json'))) {
149
+ return dir;
150
+ }
151
+ const parent = norm(dirname(dir));
152
+ if (parent === dir) {
153
+ return null;
154
+ }
155
+ dir = parent;
156
+ }
157
+ };
158
+ /** Returns the service keyed by `key`, creating it anchored there if needed. */
159
+ const serviceAt = (key) => {
160
+ let svc = services.get(key);
161
+ if (!svc) {
162
+ svc = new AzerothLanguageService(key);
163
+ services.set(key, svc);
164
+ }
165
+ return svc;
166
+ };
167
+ /**
168
+ * The service for `uri`: anchored at the file's nearest tsconfig project, so
169
+ * each sub-package of a monorepo resolves against its own config regardless
170
+ * of which ancestor folder the editor opened. Falls back to the longest-
171
+ * matching workspace root, then the file's own directory, when no tsconfig
172
+ * exists above the file.
173
+ */
174
+ const serviceFor = (uri) => {
175
+ const filePath = uriToPath(uri);
176
+ const projectDir = nearestProjectDir(filePath);
177
+ if (projectDir) {
178
+ return serviceAt(projectDir);
179
+ }
180
+ const path = norm(filePath);
181
+ let best = null;
182
+ for (const root of roots) {
183
+ if ((path === root || path.startsWith(root + '/')) && (best === null || root.length > best.length)) {
184
+ best = root;
185
+ }
186
+ }
187
+ return serviceAt(best ?? norm(dirname(filePath)));
59
188
  };
60
189
  const isAzeroth = (uri) => uri.endsWith(EXTENSION);
190
+ // An unexpected throw from the service must not reach the LSP client (it
191
+ // wedges the feature for the session). Degrade to the handler's type-correct
192
+ // safe default and log, so one bad request can't take a capability down.
193
+ const safe = (fn, fallback) => {
194
+ try {
195
+ return fn();
196
+ }
197
+ catch (e) {
198
+ connection.console.error(`[azeroth] request handler failed: ${e instanceof Error ? e.stack ?? e.message : String(e)}`);
199
+ return fallback;
200
+ }
201
+ };
61
202
  // --- Settings (azeroth.*), pulled from the client and refreshed on change. ---
62
203
  let settings = DEFAULT_SETTINGS;
63
204
  let hasConfigurationCapability = false;
205
+ let hasWorkspaceFolderCapability = false;
64
206
  /** Merges the client's `azeroth` config over the defaults (tolerant of gaps). */
65
207
  const applyConfig = (cfg) => {
66
- const c = (cfg ?? {});
67
- const obj = (v) => (typeof v === 'object' && v !== null ? v : {});
68
- const diagnostics = obj(c.diagnostics);
69
- const format = obj(c.format);
70
- const suggest = obj(c.suggest);
71
- const inlay = obj(c.inlayHints);
72
- settings =
73
- {
74
- diagnostics: { enable: diagnostics.enable !== false },
75
- format: { enable: format.enable !== false },
76
- autoClosingTags: c.autoClosingTags !== false,
77
- suggest: {
78
- autoImports: suggest.autoImports !== false,
79
- componentSnippets: suggest.componentSnippets !== false
80
- },
81
- inlayHints: {
82
- enabled: inlay.enabled !== false,
83
- parameterNames: inlay.parameterNames ?? 'all',
84
- parameterTypes: inlay.parameterTypes !== false,
85
- variableTypes: inlay.variableTypes !== false,
86
- propertyDeclarationTypes: inlay.propertyDeclarationTypes !== false,
87
- functionLikeReturnTypes: inlay.functionLikeReturnTypes !== false,
88
- enumMemberValues: inlay.enumMemberValues !== false
89
- }
90
- };
208
+ settings = parseSettings(cfg);
91
209
  };
92
210
  /** Pulls `azeroth` settings from the client (no-op if config isn't supported). */
93
211
  const refreshSettings = async () => {
@@ -103,9 +221,16 @@ export function startServer(connection = createConnection()) {
103
221
  };
104
222
  connection.onInitialize((params) => {
105
223
  hasConfigurationCapability = params.capabilities.workspace?.configuration === true;
106
- const root = params.workspaceFolders?.[0]?.uri ?? params.rootUri ?? undefined;
107
- if (root) {
108
- service = new AzerothLanguageService(uriToPath(root));
224
+ hasWorkspaceFolderCapability = params.capabilities.workspace?.workspaceFolders === true;
225
+ // Register EVERY folder, not just the first, so each root gets its own
226
+ // project-anchored service.
227
+ if (params.workspaceFolders && params.workspaceFolders.length > 0) {
228
+ for (const folder of params.workspaceFolders) {
229
+ registerRoot(folder.uri);
230
+ }
231
+ }
232
+ else if (params.rootUri) {
233
+ registerRoot(params.rootUri);
109
234
  }
110
235
  // Clients without `workspace/configuration` (e.g. the JetBrains LSP
111
236
  // client) pass the `azeroth.*` settings as initializationOptions instead.
@@ -114,7 +239,7 @@ export function startServer(connection = createConnection()) {
114
239
  }
115
240
  return {
116
241
  capabilities: {
117
- textDocumentSync: TextDocumentSyncKind.Full,
242
+ textDocumentSync: TextDocumentSyncKind.Incremental,
118
243
  completionProvider: {
119
244
  resolveProvider: true,
120
245
  triggerCharacters: ['<', '.', ' ', '{', ':', '@', '/']
@@ -124,7 +249,7 @@ export function startServer(connection = createConnection()) {
124
249
  typeDefinitionProvider: true,
125
250
  referencesProvider: true,
126
251
  documentHighlightProvider: true,
127
- renameProvider: true,
252
+ renameProvider: { prepareProvider: true },
128
253
  documentSymbolProvider: true,
129
254
  workspaceSymbolProvider: true,
130
255
  signatureHelpProvider: { triggerCharacters: ['(', ','] },
@@ -137,7 +262,14 @@ export function startServer(connection = createConnection()) {
137
262
  documentOnTypeFormattingProvider: { firstTriggerCharacter: ';', moreTriggerCharacter: ['}', '\n'] },
138
263
  selectionRangeProvider: true,
139
264
  linkedEditingRangeProvider: true,
140
- inlayHintProvider: true
265
+ callHierarchyProvider: true,
266
+ codeLensProvider: { resolveProvider: true },
267
+ documentLinkProvider: {},
268
+ colorProvider: true,
269
+ inlayHintProvider: true,
270
+ workspace: {
271
+ workspaceFolders: { supported: true, changeNotifications: true }
272
+ }
141
273
  }
142
274
  };
143
275
  });
@@ -146,6 +278,18 @@ export function startServer(connection = createConnection()) {
146
278
  void connection.client.register(DidChangeConfigurationNotification.type, undefined);
147
279
  void refreshSettings();
148
280
  }
281
+ if (hasWorkspaceFolderCapability) {
282
+ connection.workspace.onDidChangeWorkspaceFolders((event) => {
283
+ for (const removed of event.removed) {
284
+ const root = norm(uriToPath(removed.uri));
285
+ roots = roots.filter((r) => r !== root);
286
+ services.delete(root);
287
+ }
288
+ for (const added of event.added) {
289
+ registerRoot(added.uri);
290
+ }
291
+ });
292
+ }
149
293
  });
150
294
  connection.onDidChangeConfiguration(async () => {
151
295
  await refreshSettings();
@@ -157,31 +301,31 @@ export function startServer(connection = createConnection()) {
157
301
  });
158
302
  // --- Document lifecycle: keep the service's buffer in sync, publish diagnostics. ---
159
303
  const refreshDiagnostics = (uri) => {
160
- if (!isAzeroth(uri) || !service) {
304
+ if (!isAzeroth(uri)) {
161
305
  return;
162
306
  }
163
- const diagnostics = settings.diagnostics.enable ? service.getDiagnostics(uri) : [];
307
+ const diagnostics = settings.diagnostics.enable ? safe(() => serviceFor(uri).getDiagnostics(uri), []) : [];
164
308
  connection.sendDiagnostics({ uri, diagnostics });
165
309
  };
166
310
  documents.onDidOpen((event) => {
167
311
  if (!isAzeroth(event.document.uri)) {
168
312
  return;
169
313
  }
170
- ensureService(event.document.uri).didOpen(event.document.uri, event.document.getText());
314
+ serviceFor(event.document.uri).didOpen(event.document.uri, event.document.getText());
171
315
  refreshDiagnostics(event.document.uri);
172
316
  });
173
317
  documents.onDidChangeContent((event) => {
174
318
  if (!isAzeroth(event.document.uri)) {
175
319
  return;
176
320
  }
177
- ensureService(event.document.uri).didChange(event.document.uri, event.document.getText());
321
+ serviceFor(event.document.uri).didChange(event.document.uri, event.document.getText());
178
322
  refreshDiagnostics(event.document.uri);
179
323
  });
180
324
  documents.onDidClose((event) => {
181
- if (!isAzeroth(event.document.uri) || !service) {
325
+ if (!isAzeroth(event.document.uri)) {
182
326
  return;
183
327
  }
184
- service.didClose(event.document.uri);
328
+ serviceFor(event.document.uri).didClose(event.document.uri);
185
329
  connection.sendDiagnostics({ uri: event.document.uri, diagnostics: [] });
186
330
  });
187
331
  // --- Feature requests: forward to the service, return its (LSP-shaped) results. ---
@@ -189,103 +333,172 @@ export function startServer(connection = createConnection()) {
189
333
  // completed document; completion and its resolve always pair up per file.
190
334
  let lastCompletionUri = '';
191
335
  connection.onCompletion((params) => {
192
- if (!service || !isAzeroth(params.textDocument.uri)) {
336
+ if (!isAzeroth(params.textDocument.uri) || !settings.features.completion) {
193
337
  return [];
194
338
  }
195
339
  lastCompletionUri = params.textDocument.uri;
196
- return service.getCompletions(params.textDocument.uri, params.position, settings.suggest);
340
+ return safe(() => serviceFor(params.textDocument.uri).getCompletions(params.textDocument.uri, params.position, settings.suggest), []);
197
341
  });
198
342
  connection.onCompletionResolve((item) => {
199
- if (!service || !lastCompletionUri) {
343
+ if (!lastCompletionUri) {
200
344
  return item;
201
345
  }
202
346
  // The service's CompletionItem mirrors the LSP one; the only shape
203
347
  // difference is `kind` optionality, so the cast at this boundary is safe.
204
- const resolved = service.resolveCompletion(lastCompletionUri, item);
205
- return {
206
- ...item,
207
- detail: resolved.detail,
208
- documentation: resolved.documentation,
209
- additionalTextEdits: resolved.additionalTextEdits
210
- };
348
+ return safe(() => {
349
+ const resolved = serviceFor(lastCompletionUri).resolveCompletion(lastCompletionUri, item);
350
+ return {
351
+ ...item,
352
+ detail: resolved.detail,
353
+ documentation: resolved.documentation,
354
+ additionalTextEdits: resolved.additionalTextEdits
355
+ };
356
+ }, item);
211
357
  });
212
358
  connection.onHover((params) => {
213
- if (!service || !isAzeroth(params.textDocument.uri)) {
214
- return null;
215
- }
216
- const hover = service.getHover(params.textDocument.uri, params.position);
217
- if (!hover) {
359
+ if (!isAzeroth(params.textDocument.uri) || !settings.features.hover) {
218
360
  return null;
219
361
  }
220
- return { contents: { kind: 'markdown', value: hover.contents }, range: hover.range };
362
+ return safe(() => {
363
+ const hover = serviceFor(params.textDocument.uri).getHover(params.textDocument.uri, params.position);
364
+ if (!hover) {
365
+ return null;
366
+ }
367
+ return { contents: { kind: 'markdown', value: hover.contents }, range: hover.range };
368
+ }, null);
221
369
  });
222
- connection.onDefinition((params) => service && isAzeroth(params.textDocument.uri)
223
- ? service.getDefinition(params.textDocument.uri, params.position)
370
+ connection.onDefinition((params) => isAzeroth(params.textDocument.uri) && settings.features.definition
371
+ ? safe(() => serviceFor(params.textDocument.uri).getDefinition(params.textDocument.uri, params.position), [])
224
372
  : []);
225
- connection.onTypeDefinition((params) => service && isAzeroth(params.textDocument.uri)
226
- ? service.getTypeDefinition(params.textDocument.uri, params.position)
373
+ connection.onTypeDefinition((params) => isAzeroth(params.textDocument.uri) && settings.features.typeDefinition
374
+ ? safe(() => serviceFor(params.textDocument.uri).getTypeDefinition(params.textDocument.uri, params.position), [])
227
375
  : []);
228
- connection.onReferences((params) => service && isAzeroth(params.textDocument.uri)
229
- ? service.getReferences(params.textDocument.uri, params.position)
376
+ connection.onReferences((params) => isAzeroth(params.textDocument.uri) && settings.features.references
377
+ ? safe(() => serviceFor(params.textDocument.uri).getReferences(params.textDocument.uri, params.position), [])
230
378
  : []);
231
- connection.onDocumentHighlight((params) => service && isAzeroth(params.textDocument.uri)
232
- ? service.getDocumentHighlights(params.textDocument.uri, params.position)
379
+ connection.onDocumentHighlight((params) => isAzeroth(params.textDocument.uri) && settings.features.documentHighlight
380
+ ? safe(() => serviceFor(params.textDocument.uri).getDocumentHighlights(params.textDocument.uri, params.position), [])
233
381
  : []);
234
- connection.onRenameRequest((params) => service && isAzeroth(params.textDocument.uri)
235
- ? service.getRenameEdits(params.textDocument.uri, params.position, params.newName)
382
+ // prepareRename shares the rename toggle: validating the target up-front is
383
+ // the first half of the same feature, so it gates behind features.rename.
384
+ connection.onPrepareRename((params) => isAzeroth(params.textDocument.uri) && settings.features.rename
385
+ ? safe(() => serviceFor(params.textDocument.uri).getPrepareRename(params.textDocument.uri, params.position), null)
386
+ : null);
387
+ connection.onRenameRequest((params) => isAzeroth(params.textDocument.uri) && settings.features.rename
388
+ ? safe(() => serviceFor(params.textDocument.uri).getRenameEdits(params.textDocument.uri, params.position, params.newName), null)
236
389
  : null);
237
- connection.onDocumentSymbol((params) => service && isAzeroth(params.textDocument.uri)
238
- ? service.getDocumentSymbols(params.textDocument.uri)
390
+ connection.onDocumentSymbol((params) => isAzeroth(params.textDocument.uri) && settings.features.documentSymbol
391
+ ? safe(() => serviceFor(params.textDocument.uri).getDocumentSymbols(params.textDocument.uri), [])
239
392
  : []);
240
- connection.onWorkspaceSymbol((params) => service ? service.getWorkspaceSymbols(params.query) : []);
241
- connection.onSignatureHelp((params) => service && isAzeroth(params.textDocument.uri)
242
- ? service.getSignatureHelp(params.textDocument.uri, params.position)
393
+ connection.onWorkspaceSymbol((params) =>
394
+ // Workspace symbols span every root, so query each per-root service and
395
+ // merge - the one handler that isn't keyed to a single document.
396
+ settings.features.workspaceSymbol
397
+ ? safe(() => [...services.values()].flatMap((s) => s.getWorkspaceSymbols(params.query)), [])
398
+ : []);
399
+ connection.onSignatureHelp((params) => isAzeroth(params.textDocument.uri) && settings.features.signatureHelp
400
+ ? safe(() => serviceFor(params.textDocument.uri).getSignatureHelp(params.textDocument.uri, params.position), null)
243
401
  : null);
244
- connection.onFoldingRanges((params) => service && isAzeroth(params.textDocument.uri)
245
- ? service.getFoldingRanges(params.textDocument.uri)
402
+ connection.onFoldingRanges((params) => isAzeroth(params.textDocument.uri) && settings.features.folding
403
+ ? safe(() => serviceFor(params.textDocument.uri).getFoldingRanges(params.textDocument.uri), [])
246
404
  : []);
247
405
  connection.onCodeAction((params) => {
248
- if (!service || !isAzeroth(params.textDocument.uri)) {
406
+ if (!isAzeroth(params.textDocument.uri) || !settings.features.codeActions) {
249
407
  return [];
250
408
  }
251
- const codes = params.context.diagnostics
252
- .map(diagnostic => (typeof diagnostic.code === 'number' ? diagnostic.code : undefined))
253
- .filter((code) => code !== undefined);
254
- return service.getCodeActions(params.textDocument.uri, params.range, codes);
409
+ return safe(() => {
410
+ const codes = params.context.diagnostics
411
+ .map(diagnostic => (typeof diagnostic.code === 'number' ? diagnostic.code : undefined))
412
+ .filter((code) => code !== undefined);
413
+ return serviceFor(params.textDocument.uri).getCodeActions(params.textDocument.uri, params.range, codes);
414
+ }, []);
255
415
  });
256
- connection.onDocumentFormatting((params) => service && isAzeroth(params.textDocument.uri) && settings.format.enable
257
- ? service.getFormattingEdits(params.textDocument.uri)
416
+ connection.onDocumentFormatting((params) => isAzeroth(params.textDocument.uri) && settings.format.enable
417
+ ? safe(() => serviceFor(params.textDocument.uri).getFormattingEdits(params.textDocument.uri), [])
258
418
  : []);
259
- connection.languages.inlayHint.on((params) => service && isAzeroth(params.textDocument.uri)
260
- ? service.getInlayHints(params.textDocument.uri, params.range, settings.inlayHints)
419
+ connection.languages.inlayHint.on((params) => isAzeroth(params.textDocument.uri)
420
+ ? safe(() => serviceFor(params.textDocument.uri).getInlayHints(params.textDocument.uri, params.range, settings.inlayHints), [])
261
421
  : []);
262
- connection.onSelectionRanges((params) => service && isAzeroth(params.textDocument.uri)
263
- ? service.getSelectionRanges(params.textDocument.uri, params.positions)
422
+ connection.onSelectionRanges((params) => isAzeroth(params.textDocument.uri) && settings.features.selectionRange
423
+ ? safe(() => serviceFor(params.textDocument.uri).getSelectionRanges(params.textDocument.uri, params.positions), params.positions.map(position => ({ range: { start: position, end: position } })))
264
424
  : params.positions.map(position => ({ range: { start: position, end: position } })));
265
- connection.onDocumentOnTypeFormatting((params) => service && isAzeroth(params.textDocument.uri) && settings.format.enable
266
- ? service.getOnTypeFormattingEdits(params.textDocument.uri, params.position, params.ch)
425
+ connection.onDocumentOnTypeFormatting((params) => isAzeroth(params.textDocument.uri) && settings.format.enable && settings.features.onTypeFormatting
426
+ ? safe(() => serviceFor(params.textDocument.uri).getOnTypeFormattingEdits(params.textDocument.uri, params.position, params.ch), [])
267
427
  : []);
268
428
  connection.languages.semanticTokens.on((params) => {
269
- if (!service || !isAzeroth(params.textDocument.uri)) {
429
+ if (!isAzeroth(params.textDocument.uri) || !settings.features.semanticTokens) {
270
430
  return { data: [] };
271
431
  }
272
- return service.getSemanticTokens(params.textDocument.uri);
432
+ return safe(() => serviceFor(params.textDocument.uri).getSemanticTokens(params.textDocument.uri), { data: [] });
273
433
  });
274
434
  connection.languages.onLinkedEditingRange((params) => {
275
- if (!service || !isAzeroth(params.textDocument.uri)) {
435
+ if (!isAzeroth(params.textDocument.uri) || !settings.features.linkedEditing) {
276
436
  return null;
277
437
  }
278
- const ranges = service.getLinkedEditingRanges(params.textDocument.uri, params.position);
279
- return ranges ? { ranges } : null;
438
+ return safe(() => {
439
+ const ranges = serviceFor(params.textDocument.uri).getLinkedEditingRanges(params.textDocument.uri, params.position);
440
+ return ranges ? { ranges } : null;
441
+ }, null);
280
442
  });
443
+ connection.languages.callHierarchy.onPrepare((params) => isAzeroth(params.textDocument.uri) && settings.features.callHierarchy
444
+ ? safe(() => serviceFor(params.textDocument.uri).getCallHierarchyPrepare(params.textDocument.uri, params.position), null)
445
+ : null);
446
+ connection.languages.callHierarchy.onIncomingCalls((params) => {
447
+ // The follow-up requests carry only the prepared item (whose `data` holds
448
+ // the source URI), not a textDocument; route by that uri.
449
+ if (!settings.features.callHierarchy) {
450
+ return [];
451
+ }
452
+ const item = params.item;
453
+ const uri = item.data?.uri;
454
+ if (!uri || !isAzeroth(uri)) {
455
+ return [];
456
+ }
457
+ return safe(() => serviceFor(uri).getIncomingCalls(item), []);
458
+ });
459
+ connection.languages.callHierarchy.onOutgoingCalls((params) => {
460
+ if (!settings.features.callHierarchy) {
461
+ return [];
462
+ }
463
+ const item = params.item;
464
+ const uri = item.data?.uri;
465
+ if (!uri || !isAzeroth(uri)) {
466
+ return [];
467
+ }
468
+ return safe(() => serviceFor(uri).getOutgoingCalls(item), []);
469
+ });
470
+ connection.onCodeLens((params) => isAzeroth(params.textDocument.uri) && settings.features.codeLens
471
+ ? safe(() => serviceFor(params.textDocument.uri).getCodeLenses(params.textDocument.uri), [])
472
+ : []);
473
+ connection.onCodeLensResolve((lens) => {
474
+ // The resolve request carries only the lens; its `data` holds the source
475
+ // URI (stashed by getCodeLenses), so route by that.
476
+ if (!settings.features.codeLens) {
477
+ return lens;
478
+ }
479
+ const uri = lens.data?.uri;
480
+ if (!uri || !isAzeroth(uri)) {
481
+ return lens;
482
+ }
483
+ return safe(() => serviceFor(uri).resolveCodeLens(uri, lens), lens);
484
+ });
485
+ connection.onDocumentLinks((params) => isAzeroth(params.textDocument.uri) && settings.features.documentLinks
486
+ ? safe(() => serviceFor(params.textDocument.uri).getDocumentLinks(params.textDocument.uri), [])
487
+ : []);
488
+ connection.onDocumentColor((params) => isAzeroth(params.textDocument.uri) && settings.features.documentColor
489
+ ? safe(() => serviceFor(params.textDocument.uri).getDocumentColors(params.textDocument.uri), [])
490
+ : []);
491
+ connection.onColorPresentation((params) => isAzeroth(params.textDocument.uri) && settings.features.documentColor
492
+ ? safe(() => serviceFor(params.textDocument.uri).getColorPresentations(params.textDocument.uri, params.color, params.range), [])
493
+ : []);
281
494
  // Custom request: the client calls this after the user types `>` so the
282
495
  // editor can auto-close the opening tag (VS Code has no built-in tag close
283
496
  // for custom languages). Returns a snippet string, or null.
284
497
  connection.onRequest('azeroth/autoInsert', (params) => {
285
- if (!service || !isAzeroth(params.textDocument.uri) || !settings.autoClosingTags) {
498
+ if (!isAzeroth(params.textDocument.uri) || !settings.autoClosingTags) {
286
499
  return null;
287
500
  }
288
- return service.getAutoCloseTag(params.textDocument.uri, params.position);
501
+ return safe(() => serviceFor(params.textDocument.uri).getAutoCloseTag(params.textDocument.uri, params.position), null);
289
502
  });
290
503
  documents.listen(connection);
291
504
  connection.listen();
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azerothjs/language-server",
3
- "version": "0.5.0-beta.1",
3
+ "version": "0.6.0-beta.1",
4
4
  "description": "AzerothJS language server — a Language Server Protocol front-end for .azeroth files",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -9,7 +9,8 @@
9
9
  "bin":
10
10
  {
11
11
  "azeroth-language-server": "./dist/cli.js",
12
- "azeroth-tsc": "./dist/tsc-cli.js"
12
+ "azeroth-tsc": "./dist/tsc-cli.js",
13
+ "azeroth-docgen": "./dist/docgen-cli.js"
13
14
  },
14
15
  "exports":
15
16
  {
@@ -20,7 +21,8 @@
20
21
  "default": "./dist/index.js"
21
22
  },
22
23
  "./cli": "./dist/cli.js",
23
- "./tsc": "./dist/tsc.js"
24
+ "./tsc": "./dist/tsc.js",
25
+ "./docgen": "./dist/docgen-cli.js"
24
26
  },
25
27
  "files":
26
28
  [
@@ -28,7 +30,7 @@
28
30
  ],
29
31
  "dependencies":
30
32
  {
31
- "@azerothjs/language-service": "0.5.0-beta.1",
33
+ "@azerothjs/language-service": "0.6.0-beta.1",
32
34
  "typescript": ">=5",
33
35
  "vscode-languageserver": "^9",
34
36
  "vscode-languageserver-textdocument": "^1"