@analogjs/language-server 0.0.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 +6 -0
- package/bin/analog-language-server.js +8 -0
- package/out/index.d.ts +1 -0
- package/out/index.js +30 -0
- package/out/languagePlugin.d.ts +6 -0
- package/out/languagePlugin.js +190 -0
- package/package.json +35 -0
package/README.md
ADDED
package/out/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/out/index.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const languagePlugin_1 = require("./languagePlugin");
|
|
4
|
+
const volar_service_emmet_1 = require("volar-service-emmet");
|
|
5
|
+
const volar_service_html_1 = require("volar-service-html");
|
|
6
|
+
const volar_service_css_1 = require("volar-service-css");
|
|
7
|
+
const volar_service_typescript_1 = require("volar-service-typescript");
|
|
8
|
+
const node_1 = require("@volar/language-server/node");
|
|
9
|
+
const connection = (0, node_1.createConnection)();
|
|
10
|
+
const server = (0, node_1.createServer)(connection);
|
|
11
|
+
connection.listen();
|
|
12
|
+
connection.onInitialize(params => {
|
|
13
|
+
const tsdk = (0, node_1.loadTsdkByPath)(params.initializationOptions.typescript.tsdk, params.locale);
|
|
14
|
+
return server.initialize(params, (0, node_1.createTypeScriptProjectProviderFactory)(tsdk.typescript, tsdk.diagnosticMessages), {
|
|
15
|
+
getLanguagePlugins() {
|
|
16
|
+
return [languagePlugin_1.analogLanguagePlugin];
|
|
17
|
+
},
|
|
18
|
+
getServicePlugins() {
|
|
19
|
+
return [
|
|
20
|
+
(0, volar_service_html_1.create)(),
|
|
21
|
+
(0, volar_service_css_1.create)(),
|
|
22
|
+
(0, volar_service_emmet_1.create)(),
|
|
23
|
+
...(0, volar_service_typescript_1.create)(tsdk.typescript, {}),
|
|
24
|
+
];
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
connection.onInitialized(server.initialized);
|
|
29
|
+
connection.onShutdown(server.shutdown);
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type LanguagePlugin, type VirtualCode } from '@volar/language-core';
|
|
2
|
+
import * as html from 'vscode-html-languageservice';
|
|
3
|
+
export declare const analogLanguagePlugin: LanguagePlugin;
|
|
4
|
+
export interface AnalogVirtualCode extends VirtualCode {
|
|
5
|
+
htmlDocument: html.HTMLDocument;
|
|
6
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.analogLanguagePlugin = void 0;
|
|
27
|
+
const language_core_1 = require("@volar/language-core");
|
|
28
|
+
const html = __importStar(require("vscode-html-languageservice"));
|
|
29
|
+
exports.analogLanguagePlugin = {
|
|
30
|
+
createVirtualCode(_id, languageId, snapshot) {
|
|
31
|
+
if (languageId === 'analog') {
|
|
32
|
+
return createAnalogCode(snapshot);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
updateVirtualCode(_id, _oldVirtualCode, newSnapshot) {
|
|
36
|
+
return createAnalogCode(newSnapshot);
|
|
37
|
+
},
|
|
38
|
+
typescript: {
|
|
39
|
+
extraFileExtensions: [{ extension: 'analog', isMixedContent: true, scriptKind: 3 }],
|
|
40
|
+
getScript() {
|
|
41
|
+
return undefined;
|
|
42
|
+
},
|
|
43
|
+
getExtraScripts(fileName, root) {
|
|
44
|
+
const scripts = [];
|
|
45
|
+
for (const code of (0, language_core_1.forEachEmbeddedCode)(root)) {
|
|
46
|
+
if (code.languageId === 'javascript') {
|
|
47
|
+
scripts.push({
|
|
48
|
+
fileName: fileName + '.' + code.id + '.js',
|
|
49
|
+
code,
|
|
50
|
+
extension: '.js',
|
|
51
|
+
scriptKind: 1,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else if (code.languageId === 'typescript') {
|
|
55
|
+
scripts.push({
|
|
56
|
+
fileName: fileName + '.' + code.id + '.ts',
|
|
57
|
+
code,
|
|
58
|
+
extension: '.ts',
|
|
59
|
+
scriptKind: 3,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else if (code.languageId === 'typescriptreact') {
|
|
63
|
+
scripts.push({
|
|
64
|
+
fileName: fileName + '.' + code.id + '.tsx',
|
|
65
|
+
code,
|
|
66
|
+
extension: '.ts',
|
|
67
|
+
scriptKind: 4,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return scripts;
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
const htmlLs = html.getLanguageService();
|
|
76
|
+
function createAnalogCode(snapshot) {
|
|
77
|
+
const document = html.TextDocument.create('', 'html', 0, snapshot.getText(0, snapshot.getLength()));
|
|
78
|
+
const htmlDocument = htmlLs.parseHTMLDocument(document);
|
|
79
|
+
return {
|
|
80
|
+
id: 'root',
|
|
81
|
+
languageId: 'html',
|
|
82
|
+
snapshot,
|
|
83
|
+
mappings: [{
|
|
84
|
+
sourceOffsets: [0],
|
|
85
|
+
generatedOffsets: [0],
|
|
86
|
+
lengths: [snapshot.getLength()],
|
|
87
|
+
data: {
|
|
88
|
+
completion: true,
|
|
89
|
+
format: true,
|
|
90
|
+
navigation: true,
|
|
91
|
+
semantic: true,
|
|
92
|
+
structure: true,
|
|
93
|
+
verification: true,
|
|
94
|
+
},
|
|
95
|
+
}],
|
|
96
|
+
embeddedCodes: [...createEmbeddedCodes()],
|
|
97
|
+
htmlDocument,
|
|
98
|
+
};
|
|
99
|
+
function* createEmbeddedCodes() {
|
|
100
|
+
let styles = 0;
|
|
101
|
+
let scripts = 0;
|
|
102
|
+
let langs = 0;
|
|
103
|
+
for (const root of htmlDocument.roots) {
|
|
104
|
+
if (root.tag === 'style' && root.startTagEnd !== undefined && root.endTagStart !== undefined) {
|
|
105
|
+
const styleText = snapshot.getText(root.startTagEnd, root.endTagStart);
|
|
106
|
+
yield {
|
|
107
|
+
id: 'style_' + styles++,
|
|
108
|
+
languageId: 'css',
|
|
109
|
+
snapshot: {
|
|
110
|
+
getText: (start, end) => styleText.substring(start, end),
|
|
111
|
+
getLength: () => styleText.length,
|
|
112
|
+
getChangeRange: () => undefined,
|
|
113
|
+
},
|
|
114
|
+
mappings: [{
|
|
115
|
+
sourceOffsets: [root.startTagEnd],
|
|
116
|
+
generatedOffsets: [0],
|
|
117
|
+
lengths: [styleText.length],
|
|
118
|
+
data: {
|
|
119
|
+
completion: true,
|
|
120
|
+
format: true,
|
|
121
|
+
navigation: true,
|
|
122
|
+
semantic: true,
|
|
123
|
+
structure: true,
|
|
124
|
+
verification: true,
|
|
125
|
+
},
|
|
126
|
+
}],
|
|
127
|
+
embeddedCodes: [],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (root.tag === 'script' && root.startTagEnd !== undefined && root.endTagStart !== undefined) {
|
|
131
|
+
const text = snapshot.getText(root.startTagEnd, root.endTagStart);
|
|
132
|
+
const lang = root.attributes?.lang;
|
|
133
|
+
const isTs = lang === 'ts' || lang === '"ts"' || lang === "'ts'";
|
|
134
|
+
yield {
|
|
135
|
+
id: 'script_' + scripts++,
|
|
136
|
+
languageId: isTs ? 'typescript' : 'javascript',
|
|
137
|
+
snapshot: {
|
|
138
|
+
getText: (start, end) => text.substring(start, end),
|
|
139
|
+
getLength: () => text.length,
|
|
140
|
+
getChangeRange: () => undefined,
|
|
141
|
+
},
|
|
142
|
+
mappings: [{
|
|
143
|
+
sourceOffsets: [root.startTagEnd],
|
|
144
|
+
generatedOffsets: [0],
|
|
145
|
+
lengths: [text.length],
|
|
146
|
+
data: {
|
|
147
|
+
completion: true,
|
|
148
|
+
format: true,
|
|
149
|
+
navigation: true,
|
|
150
|
+
semantic: true,
|
|
151
|
+
structure: true,
|
|
152
|
+
verification: true,
|
|
153
|
+
},
|
|
154
|
+
}],
|
|
155
|
+
embeddedCodes: [],
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (root.tag === 'template' && root.startTagEnd !== undefined && root.endTagStart !== undefined) {
|
|
159
|
+
const text = snapshot.getText(root.startTagEnd, root.endTagStart);
|
|
160
|
+
const lang = root.attributes?.lang;
|
|
161
|
+
const isMd = lang === 'md' || lang === '"md"' || lang === "'md'";
|
|
162
|
+
yield {
|
|
163
|
+
id: 'lang_' + langs++,
|
|
164
|
+
languageId: isMd ? 'markdown' : 'html',
|
|
165
|
+
snapshot: {
|
|
166
|
+
getText: (start, end) => text.substring(start, end),
|
|
167
|
+
getLength: () => text.length,
|
|
168
|
+
getChangeRange: () => undefined,
|
|
169
|
+
},
|
|
170
|
+
mappings: [{
|
|
171
|
+
sourceOffsets: [root.startTagEnd],
|
|
172
|
+
generatedOffsets: [0],
|
|
173
|
+
lengths: [text.length],
|
|
174
|
+
data: {
|
|
175
|
+
completion: true,
|
|
176
|
+
format: true,
|
|
177
|
+
navigation: true,
|
|
178
|
+
semantic: true,
|
|
179
|
+
structure: true,
|
|
180
|
+
verification: true,
|
|
181
|
+
},
|
|
182
|
+
}],
|
|
183
|
+
embeddedCodes: [],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=languagePlugin.js.map
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@analogjs/language-server",
|
|
3
|
+
"description": "LSP server for AnalogJS Language Service",
|
|
4
|
+
"version": "0.0.1",
|
|
5
|
+
"main": "out/index.js",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"out/**/*.js",
|
|
12
|
+
"out/**/*.d.ts"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://analogjs.org",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/analogjs/language-tools.git"
|
|
18
|
+
},
|
|
19
|
+
"bin": {
|
|
20
|
+
"analog-language-server": "./bin/analog-language-server.js"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@volar/language-core": "~2.1.0",
|
|
24
|
+
"@volar/language-server": "~2.1.0",
|
|
25
|
+
"@volar/language-service": "~2.1.0",
|
|
26
|
+
"volar-service-css": "volar-2.1",
|
|
27
|
+
"volar-service-emmet": "volar-2.1",
|
|
28
|
+
"volar-service-html": "volar-2.1",
|
|
29
|
+
"volar-service-typescript": "volar-2.1",
|
|
30
|
+
"vscode-html-languageservice": "^5.1.1"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
}
|
|
35
|
+
}
|