@lapidist/dtif-language-server 1.0.3 → 1.0.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/README.md +1 -1
- package/dist/handlers/documents.d.ts +5 -0
- package/dist/handlers/documents.d.ts.map +1 -0
- package/dist/handlers/documents.js +14 -0
- package/dist/handlers/documents.js.map +1 -0
- package/dist/handlers/features.d.ts +5 -0
- package/dist/handlers/features.d.ts.map +1 -0
- package/dist/handlers/features.js +25 -0
- package/dist/handlers/features.js.map +1 -0
- package/dist/handlers/lifecycle.d.ts +4 -0
- package/dist/handlers/lifecycle.d.ts.map +1 -0
- package/dist/handlers/lifecycle.js +16 -0
- package/dist/handlers/lifecycle.js.map +1 -0
- package/dist/runtime/services/settings-controller.d.ts.map +1 -1
- package/dist/runtime/services/settings-controller.js +8 -2
- package/dist/runtime/services/settings-controller.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -45
- package/dist/server.js.map +1 -1
- package/dist/settings.d.ts +5 -1
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +11 -4
- package/dist/settings.js.map +1 -1
- package/package.json +9 -4
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`@lapidist/dtif-language-server` delivers Language Server Protocol (LSP) services for the Design Token Interchange Format (DTIF). It brings schema-backed diagnostics, pointer-aware navigation, and assisted authoring into any editor that can host a Node.js language server.
|
|
4
4
|
|
|
5
|
-
> **Runtime** · Node.js 22<br>
|
|
5
|
+
> **Runtime** · Node.js 22 or newer<br>
|
|
6
6
|
> **Transports** · stdio (default), custom message readers/writers
|
|
7
7
|
|
|
8
8
|
## Capabilities
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Disposable } from 'vscode-languageserver/node.js';
|
|
2
|
+
import type { ManagedDocuments } from '../runtime/documents.js';
|
|
3
|
+
import type { LanguageServerSession } from '../runtime/session.js';
|
|
4
|
+
export declare function registerDocumentEventHandlers(documents: ManagedDocuments, session: LanguageServerSession): Disposable[];
|
|
5
|
+
//# sourceMappingURL=documents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/handlers/documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAgC,MAAM,+BAA+B,CAAC;AAE9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,qBAAqB,GAC7B,UAAU,EAAE,CAYd"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function registerDocumentEventHandlers(documents, session) {
|
|
2
|
+
return [
|
|
3
|
+
documents.onDidOpen((event) => {
|
|
4
|
+
session.handleDocumentOpen(event);
|
|
5
|
+
}),
|
|
6
|
+
documents.onDidChangeContent((event) => {
|
|
7
|
+
session.handleDocumentChange(event);
|
|
8
|
+
}),
|
|
9
|
+
documents.onDidClose((event) => {
|
|
10
|
+
session.handleDocumentClose(event);
|
|
11
|
+
})
|
|
12
|
+
];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/handlers/documents.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,6BAA6B,CAC3C,SAA2B,EAC3B,OAA8B;IAE9B,OAAO;QACL,SAAS,CAAC,SAAS,CAAC,CAAC,KAA4C,EAAE,EAAE;YACnE,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC;QACF,SAAS,CAAC,kBAAkB,CAAC,CAAC,KAA4C,EAAE,EAAE;YAC5E,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC;QACF,SAAS,CAAC,UAAU,CAAC,CAAC,KAA4C,EAAE,EAAE;YACpE,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Connection } from 'vscode-languageserver/node.js';
|
|
2
|
+
import type { ManagedDocuments } from '../runtime/documents.js';
|
|
3
|
+
import type { LanguageServerSession } from '../runtime/session.js';
|
|
4
|
+
export declare function registerLanguageFeatureHandlers(connection: Connection, documents: ManagedDocuments, session: LanguageServerSession): void;
|
|
5
|
+
//# sourceMappingURL=features.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/handlers/features.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAOnE,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,qBAAqB,GAC7B,IAAI,CA8BN"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { buildQuickFixes } from '../code-actions.js';
|
|
2
|
+
import { buildCompletions } from '../features/completions/index.js';
|
|
3
|
+
import { buildHover } from '../features/hover.js';
|
|
4
|
+
import { findDefinition } from '../features/definition.js';
|
|
5
|
+
import { buildRenameEdit } from '../features/rename.js';
|
|
6
|
+
export function registerLanguageFeatureHandlers(connection, documents, session) {
|
|
7
|
+
connection.onDefinition((params) => findDefinition(session.store, params.textDocument.uri, params.position));
|
|
8
|
+
connection.onHover((params) => buildHover(session.store, params.textDocument.uri, params.position));
|
|
9
|
+
connection.onCompletion((params) => {
|
|
10
|
+
const document = documents.get(params.textDocument.uri);
|
|
11
|
+
if (!document) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
return buildCompletions({ document, position: params.position, store: session.store });
|
|
15
|
+
});
|
|
16
|
+
connection.onRenameRequest((params) => buildRenameEdit(session.store, params.textDocument.uri, params.position, params.newName));
|
|
17
|
+
connection.onCodeAction((params) => {
|
|
18
|
+
const document = documents.get(params.textDocument.uri);
|
|
19
|
+
if (!document) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
return buildQuickFixes({ document, params, store: session.store });
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/handlers/features.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,UAAU,+BAA+B,CAC7C,UAAsB,EACtB,SAA2B,EAC3B,OAA8B;IAE9B,UAAU,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE,CACjC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CACxE,CAAC;IAEF,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5B,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CACpE,CAAC;IAEF,UAAU,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE,CACpC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CACzF,CAAC;IAEF,UAAU,CAAC,YAAY,CAAC,CAAC,MAAwB,EAAE,EAAE;QACnD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Connection, type Disposable } from 'vscode-languageserver/node.js';
|
|
2
|
+
import type { LanguageServerSession } from '../runtime/session.js';
|
|
3
|
+
export declare function registerLifecycleHandlers(connection: Connection, session: LanguageServerSession, documentListeners: readonly Disposable[]): void;
|
|
4
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/handlers/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,qBAAqB,EAC9B,iBAAiB,EAAE,SAAS,UAAU,EAAE,GACvC,IAAI,CAiBN"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function registerLifecycleHandlers(connection, session, documentListeners) {
|
|
2
|
+
connection.onInitialize(() => session.handleInitialize());
|
|
3
|
+
connection.onInitialized(() => {
|
|
4
|
+
void session.handleInitialized();
|
|
5
|
+
});
|
|
6
|
+
connection.onShutdown(() => {
|
|
7
|
+
session.handleShutdown();
|
|
8
|
+
for (const disposable of documentListeners) {
|
|
9
|
+
disposable.dispose();
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
connection.onDidChangeConfiguration(() => {
|
|
13
|
+
void session.handleDidChangeConfiguration();
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/handlers/lifecycle.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,yBAAyB,CACvC,UAAsB,EACtB,OAA8B,EAC9B,iBAAwC;IAExC,UAAU,CAAC,YAAY,CAAC,GAAqB,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAE5E,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE;QAC5B,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE;QACzB,OAAO,CAAC,cAAc,EAAE,CAAC;QACzB,KAAK,MAAM,UAAU,IAAI,iBAAiB,EAAE,CAAC;YAC3C,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,wBAAwB,CAAC,GAAG,EAAE;QACvC,KAAK,OAAO,CAAC,4BAA4B,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-controller.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/settings-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAKL,KAAK,0BAA0B,EAChC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;gBAEZ,KAAK,EAAE,OAAO;CAK3B;AAED,qBAAa,kBAAkB;;gBAIjB,UAAU,EAAE,UAAU;IAIlC,IAAI,OAAO,IAAI,0BAA0B,CAExC;IAED,KAAK,IAAI,IAAI;IAIP,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"settings-controller.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/settings-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAKL,KAAK,0BAA0B,EAChC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;gBAEZ,KAAK,EAAE,OAAO;CAK3B;AAED,qBAAa,kBAAkB;;gBAIjB,UAAU,EAAE,UAAU;IAIlC,IAAI,OAAO,IAAI,0BAA0B,CAExC;IAED,KAAK,IAAI,IAAI;IAIP,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;YAyB1B,IAAI;CAWnB"}
|
|
@@ -22,12 +22,18 @@ export class SettingsController {
|
|
|
22
22
|
async refresh() {
|
|
23
23
|
const previous = this.#current;
|
|
24
24
|
let next;
|
|
25
|
+
let warnings = [];
|
|
25
26
|
try {
|
|
26
|
-
|
|
27
|
+
const result = await this.read();
|
|
28
|
+
next = result.settings;
|
|
29
|
+
warnings = result.warnings;
|
|
27
30
|
}
|
|
28
31
|
catch (error) {
|
|
29
32
|
throw new SettingsReadError(error);
|
|
30
33
|
}
|
|
34
|
+
for (const warning of warnings) {
|
|
35
|
+
this.#connection.console.warn(`DTIF language server settings warning: ${warning}`);
|
|
36
|
+
}
|
|
31
37
|
if (settingsEqual(previous, next)) {
|
|
32
38
|
return { previous, current: previous, changed: false };
|
|
33
39
|
}
|
|
@@ -37,7 +43,7 @@ export class SettingsController {
|
|
|
37
43
|
async read() {
|
|
38
44
|
const workspace = this.#connection.workspace;
|
|
39
45
|
if (!hasConfiguration(workspace)) {
|
|
40
|
-
return DEFAULT_SETTINGS;
|
|
46
|
+
return { settings: DEFAULT_SETTINGS, warnings: [] };
|
|
41
47
|
}
|
|
42
48
|
const configuration = await workspace.getConfiguration({ section: SETTINGS_SECTION });
|
|
43
49
|
return parseSettings(configuration);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-controller.js","sourceRoot":"","sources":["../../../src/runtime/services/settings-controller.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,KAAK,CAAU;IAExB,YAAY,KAAc;QACxB,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAC7B,WAAW,CAAa;IACxB,QAAQ,GAA+B,gBAAgB,CAAC;IAExD,YAAY,UAAsB;QAChC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,IAAgC,CAAC;QAErC,IAAI,CAAC;YACH,
|
|
1
|
+
{"version":3,"file":"settings-controller.js","sourceRoot":"","sources":["../../../src/runtime/services/settings-controller.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,KAAK,CAAU;IAExB,YAAY,KAAc;QACxB,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAC7B,WAAW,CAAa;IACxB,QAAQ,GAA+B,gBAAgB,CAAC;IAExD,YAAY,UAAsB;QAChC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,IAAgC,CAAC;QACrC,IAAI,QAAQ,GAAsB,EAAE,CAAC;QAErC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;YACvB,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAA2B,CAAC;QAClF,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAA2B,CAAC;IAC7E,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,MAAM,SAAS,GAAY,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QACtD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,EAEhD,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAY,MAAM,SAAS,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC/F,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;CACF;AAMD,SAAS,gBAAgB,CAAC,SAAkB;IAC1C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAY,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACnE,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC;AACtC,CAAC"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAKvF,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,cAAc,CAqB9E;AAED,wBAAgB,KAAK,IAAI,cAAc,CAItC"}
|
package/dist/server.js
CHANGED
|
@@ -1,61 +1,22 @@
|
|
|
1
1
|
import { createConnection, ProposedFeatures } from 'vscode-languageserver/node.js';
|
|
2
2
|
import { pathToFileURL } from 'node:url';
|
|
3
|
-
import { buildQuickFixes } from './code-actions.js';
|
|
4
|
-
import { buildCompletions } from './features/completions/index.js';
|
|
5
|
-
import { buildHover } from './features/hover.js';
|
|
6
|
-
import { findDefinition } from './features/definition.js';
|
|
7
|
-
import { buildRenameEdit } from './features/rename.js';
|
|
8
3
|
import { DocumentValidator } from './diagnostics/index.js';
|
|
9
4
|
import { DocumentAnalysisStore } from './core/documents/analysis-store.js';
|
|
10
5
|
import { createManagedDocuments } from './runtime/documents.js';
|
|
11
6
|
import { LanguageServerSession } from './runtime/session.js';
|
|
7
|
+
import { registerLanguageFeatureHandlers } from './handlers/features.js';
|
|
8
|
+
import { registerDocumentEventHandlers } from './handlers/documents.js';
|
|
9
|
+
import { registerLifecycleHandlers } from './handlers/lifecycle.js';
|
|
12
10
|
export function createServer(options = {}) {
|
|
13
11
|
const connection = options.connection ?? createConnection(ProposedFeatures.all);
|
|
14
12
|
const documents = options.documents ?? createManagedDocuments();
|
|
15
13
|
const validator = options.validator ?? new DocumentValidator();
|
|
16
14
|
const store = options.store ?? new DocumentAnalysisStore();
|
|
17
15
|
const session = new LanguageServerSession({ connection, documents, validator, store });
|
|
18
|
-
const documentListeners = [];
|
|
19
|
-
connection.onInitialize(() => session.handleInitialize());
|
|
20
|
-
connection.onInitialized(() => {
|
|
21
|
-
void session.handleInitialized();
|
|
22
|
-
});
|
|
23
|
-
connection.onShutdown(() => {
|
|
24
|
-
session.handleShutdown();
|
|
25
|
-
for (const disposable of documentListeners) {
|
|
26
|
-
disposable.dispose();
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
connection.onDidChangeConfiguration(() => {
|
|
30
|
-
void session.handleDidChangeConfiguration();
|
|
31
|
-
});
|
|
32
|
-
connection.onDefinition((params) => findDefinition(session.store, params.textDocument.uri, params.position));
|
|
33
|
-
connection.onHover((params) => buildHover(session.store, params.textDocument.uri, params.position));
|
|
34
|
-
connection.onCompletion((params) => {
|
|
35
|
-
const document = documents.get(params.textDocument.uri);
|
|
36
|
-
if (!document) {
|
|
37
|
-
return [];
|
|
38
|
-
}
|
|
39
|
-
return buildCompletions({ document, position: params.position, store: session.store });
|
|
40
|
-
});
|
|
41
|
-
connection.onRenameRequest((params) => buildRenameEdit(session.store, params.textDocument.uri, params.position, params.newName));
|
|
42
|
-
connection.onCodeAction((params) => {
|
|
43
|
-
const document = documents.get(params.textDocument.uri);
|
|
44
|
-
if (!document) {
|
|
45
|
-
return [];
|
|
46
|
-
}
|
|
47
|
-
return buildQuickFixes({ document, params, store: session.store });
|
|
48
|
-
});
|
|
49
16
|
documents.listen(connection);
|
|
50
|
-
documentListeners
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
documentListeners.push(documents.onDidChangeContent((event) => {
|
|
54
|
-
session.handleDocumentChange(event);
|
|
55
|
-
}));
|
|
56
|
-
documentListeners.push(documents.onDidClose((event) => {
|
|
57
|
-
session.handleDocumentClose(event);
|
|
58
|
-
}));
|
|
17
|
+
const documentListeners = registerDocumentEventHandlers(documents, session);
|
|
18
|
+
registerLifecycleHandlers(connection, session, documentListeners);
|
|
19
|
+
registerLanguageFeatureHandlers(connection, documents, session);
|
|
59
20
|
return {
|
|
60
21
|
connection,
|
|
61
22
|
documents,
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAmB,MAAM,+BAA+B,CAAC;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAyB,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAkBpE,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,sBAAsB,EAAE,CAAC;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,iBAAiB,EAAE,CAAC;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,qBAAqB,EAAE,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAEvF,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE7B,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE5E,yBAAyB,CAAC,UAAU,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAClE,+BAA+B,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEhE,OAAO;QACL,UAAU;QACV,SAAS;QACT,MAAM;YACJ,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;KACuB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,CAAC,MAAM,EAAE,CAAC;IAChB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,KAAK,EAAE,CAAC;AACV,CAAC"}
|
package/dist/settings.d.ts
CHANGED
|
@@ -3,8 +3,12 @@ export interface DtifLanguageServerSettings {
|
|
|
3
3
|
readonly mode: 'on' | 'off';
|
|
4
4
|
};
|
|
5
5
|
}
|
|
6
|
+
export interface ParsedSettings {
|
|
7
|
+
readonly settings: DtifLanguageServerSettings;
|
|
8
|
+
readonly warnings: readonly string[];
|
|
9
|
+
}
|
|
6
10
|
export declare const SETTINGS_SECTION = "dtifLanguageServer";
|
|
7
11
|
export declare const DEFAULT_SETTINGS: DtifLanguageServerSettings;
|
|
8
|
-
export declare function parseSettings(value: unknown):
|
|
12
|
+
export declare function parseSettings(value: unknown): ParsedSettings;
|
|
9
13
|
export declare function settingsEqual(a: DtifLanguageServerSettings, b: DtifLanguageServerSettings): boolean;
|
|
10
14
|
//# sourceMappingURL=settings.d.ts.map
|
package/dist/settings.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC;KAC7B,CAAC;CACH;AAED,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AAErD,eAAO,MAAM,gBAAgB,EAAE,0BAE9B,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AAErD,eAAO,MAAM,gBAAgB,EAAE,0BAE9B,CAAC;AA0BF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAW5D;AAED,wBAAgB,aAAa,CAC3B,CAAC,EAAE,0BAA0B,EAC7B,CAAC,EAAE,0BAA0B,GAC5B,OAAO,CAET"}
|
package/dist/settings.js
CHANGED
|
@@ -3,22 +3,29 @@ export const SETTINGS_SECTION = 'dtifLanguageServer';
|
|
|
3
3
|
export const DEFAULT_SETTINGS = {
|
|
4
4
|
validation: { mode: 'on' }
|
|
5
5
|
};
|
|
6
|
-
function parseValidationSettings(value) {
|
|
6
|
+
function parseValidationSettings(value, warnings) {
|
|
7
7
|
if (!isRecord(value)) {
|
|
8
|
+
warnings.push('Expected an object for validation settings; using defaults.');
|
|
8
9
|
return DEFAULT_SETTINGS.validation;
|
|
9
10
|
}
|
|
10
11
|
const mode = value.mode;
|
|
11
12
|
if (mode === 'off') {
|
|
12
13
|
return { mode: 'off' };
|
|
13
14
|
}
|
|
15
|
+
if (mode === 'on') {
|
|
16
|
+
return { mode: 'on' };
|
|
17
|
+
}
|
|
18
|
+
warnings.push(`validation.mode must be "on" or "off" (received ${JSON.stringify(mode)}); using "on".`);
|
|
14
19
|
return { mode: 'on' };
|
|
15
20
|
}
|
|
16
21
|
export function parseSettings(value) {
|
|
22
|
+
const warnings = [];
|
|
17
23
|
if (!isRecord(value)) {
|
|
18
|
-
|
|
24
|
+
warnings.push('Expected dtifLanguageServer settings to be an object; using defaults.');
|
|
25
|
+
return { settings: DEFAULT_SETTINGS, warnings };
|
|
19
26
|
}
|
|
20
|
-
const validation = parseValidationSettings(value.validation);
|
|
21
|
-
return { validation };
|
|
27
|
+
const validation = parseValidationSettings(value.validation, warnings);
|
|
28
|
+
return { settings: { validation }, warnings };
|
|
22
29
|
}
|
|
23
30
|
export function settingsEqual(a, b) {
|
|
24
31
|
return a.validation.mode === b.validation.mode;
|
package/dist/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAalD,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD,MAAM,CAAC,MAAM,gBAAgB,GAA+B;IAC1D,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;CAC3B,CAAC;AAEF,SAAS,uBAAuB,CAC9B,KAAc,EACd,QAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC7E,OAAO,gBAAgB,CAAC,UAAU,CAAC;IACrC,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,IAAI,CACX,mDAAmD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CACxF,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACvF,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAA2B,CAAC;IAC3E,CAAC;IAED,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEvE,OAAO,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAA2B,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,CAA6B,EAC7B,CAA6B;IAE7B,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;AACjD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lapidist/dtif-language-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Language Server Protocol implementation for the Design Token Interchange Format (DTIF).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"sideEffects": false,
|
|
8
8
|
"main": "./dist/index.js",
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=22",
|
|
12
|
+
"npm": ">=10"
|
|
13
|
+
},
|
|
10
14
|
"exports": {
|
|
11
15
|
".": {
|
|
12
16
|
"types": "./dist/index.d.ts",
|
|
@@ -22,12 +26,13 @@
|
|
|
22
26
|
"build": "tsc -p tsconfig.json",
|
|
23
27
|
"clean": "rimraf dist",
|
|
24
28
|
"test": "node --import tsx --test ./tests/**/*.test.ts",
|
|
29
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
25
30
|
"prepack": "npm run build"
|
|
26
31
|
},
|
|
27
32
|
"dependencies": {
|
|
28
|
-
"@lapidist/dtif-parser": "1.0.
|
|
29
|
-
"@lapidist/dtif-schema": "1.0.
|
|
30
|
-
"@lapidist/dtif-validator": "1.0.
|
|
33
|
+
"@lapidist/dtif-parser": "1.0.5",
|
|
34
|
+
"@lapidist/dtif-schema": "1.0.5",
|
|
35
|
+
"@lapidist/dtif-validator": "1.0.5",
|
|
31
36
|
"jsonc-parser": "^3.3.1",
|
|
32
37
|
"vscode-languageserver": "^9.0.1",
|
|
33
38
|
"vscode-languageserver-textdocument": "^1.0.11"
|