@herb-tools/language-server 0.4.3 → 0.6.0
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 +2 -1
- package/dist/herb-language-server.js +11230 -6548
- package/dist/herb-language-server.js.map +1 -1
- package/dist/index.cjs +11230 -6548
- package/dist/index.cjs.map +1 -1
- package/dist/linter_service.js +14 -9
- package/dist/linter_service.js.map +1 -1
- package/dist/settings.js +2 -1
- package/dist/settings.js.map +1 -1
- package/dist/types/linter_service.d.ts +1 -0
- package/dist/types/settings.d.ts +1 -0
- package/package.json +6 -7
- package/src/linter_service.ts +17 -10
- package/src/settings.ts +3 -1
package/dist/linter_service.js
CHANGED
|
@@ -11,35 +11,40 @@ class LinterService {
|
|
|
11
11
|
this.linter = new linter_1.Linter(node_wasm_1.Herb);
|
|
12
12
|
}
|
|
13
13
|
async lintDocument(textDocument) {
|
|
14
|
-
var _a, _b;
|
|
14
|
+
var _a, _b, _c, _d;
|
|
15
15
|
const settings = await this.settings.getDocumentSettings(textDocument.uri);
|
|
16
16
|
const linterEnabled = (_b = (_a = settings === null || settings === void 0 ? void 0 : settings.linter) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : true;
|
|
17
17
|
if (!linterEnabled) {
|
|
18
18
|
return { diagnostics: [] };
|
|
19
19
|
}
|
|
20
20
|
const lintResult = this.linter.lint(textDocument.getText(), { fileName: textDocument.uri });
|
|
21
|
-
const
|
|
22
|
-
lintResult.offenses.
|
|
23
|
-
|
|
24
|
-
? node_1.DiagnosticSeverity.Error
|
|
25
|
-
: node_1.DiagnosticSeverity.Warning;
|
|
21
|
+
const excludedRules = (_d = (_c = settings === null || settings === void 0 ? void 0 : settings.linter) === null || _c === void 0 ? void 0 : _c.excludedRules) !== null && _d !== void 0 ? _d : ["parser-no-errors"];
|
|
22
|
+
const offenses = lintResult.offenses.filter(offense => !excludedRules.includes(offense.rule));
|
|
23
|
+
const diagnostics = offenses.map(offense => {
|
|
26
24
|
const range = node_1.Range.create(node_1.Position.create(offense.location.start.line - 1, offense.location.start.column), node_1.Position.create(offense.location.end.line - 1, offense.location.end.column));
|
|
27
25
|
const codeDescription = {
|
|
28
26
|
href: `https://herb-tools.dev/linter/rules/${offense.rule}`
|
|
29
27
|
};
|
|
30
|
-
|
|
28
|
+
return {
|
|
31
29
|
source: this.source,
|
|
32
|
-
severity,
|
|
30
|
+
severity: this.lintToDignosticSeverity(offense.severity),
|
|
33
31
|
range,
|
|
34
32
|
message: offense.message,
|
|
35
33
|
code: offense.rule,
|
|
36
34
|
data: { rule: offense.rule },
|
|
37
35
|
codeDescription
|
|
38
36
|
};
|
|
39
|
-
diagnostics.push(diagnostic);
|
|
40
37
|
});
|
|
41
38
|
return { diagnostics };
|
|
42
39
|
}
|
|
40
|
+
lintToDignosticSeverity(severity) {
|
|
41
|
+
switch (severity) {
|
|
42
|
+
case "error": return node_1.DiagnosticSeverity.Error;
|
|
43
|
+
case "warning": return node_1.DiagnosticSeverity.Warning;
|
|
44
|
+
case "info": return node_1.DiagnosticSeverity.Information;
|
|
45
|
+
case "hint": return node_1.DiagnosticSeverity.Hint;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
43
48
|
}
|
|
44
49
|
exports.LinterService = LinterService;
|
|
45
50
|
//# sourceMappingURL=linter_service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linter_service.js","sourceRoot":"","sources":["../src/linter_service.ts"],"names":[],"mappings":";;;AAAA,qDAA6G;
|
|
1
|
+
{"version":3,"file":"linter_service.js","sourceRoot":"","sources":["../src/linter_service.ts"],"names":[],"mappings":";;;AAAA,qDAA6G;AAG7G,+CAA2C;AAC3C,qDAA4C;AAU5C,MAAa,aAAa;IAKxB,YAAY,QAAkB;QAHb,WAAM,GAAG,cAAc,CAAA;QAItC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,gBAAI,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,YAA0B;;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAC1E,MAAM,aAAa,GAAG,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,0CAAE,OAAO,mCAAI,IAAI,CAAA;QAEvD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAA;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAA;QAC3F,MAAM,aAAa,GAAG,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,0CAAE,aAAa,mCAAI,CAAC,kBAAkB,CAAC,CAAA;QAC7E,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QAE7F,MAAM,WAAW,GAAiB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACvD,MAAM,KAAK,GAAG,YAAK,CAAC,MAAM,CACxB,eAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAC/E,eAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAC5E,CAAA;YAED,MAAM,eAAe,GAAoB;gBACvC,IAAI,EAAE,uCAAuC,OAAO,CAAC,IAAI,EAAE;aAC5D,CAAA;YAED,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACxD,KAAK;gBACL,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;gBAC5B,eAAe;aAChB,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,EAAE,WAAW,EAAE,CAAA;IACxB,CAAC;IAEO,uBAAuB,CAAC,QAAsB;QACpD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,OAAO,CAAC,CAAC,OAAO,yBAAkB,CAAC,KAAK,CAAA;YAC7C,KAAK,SAAS,CAAC,CAAC,OAAO,yBAAkB,CAAC,OAAO,CAAA;YACjD,KAAK,MAAM,CAAC,CAAC,OAAO,yBAAkB,CAAC,WAAW,CAAA;YAClD,KAAK,MAAM,CAAC,CAAC,OAAO,yBAAkB,CAAC,IAAI,CAAA;QAC7C,CAAC;IACH,CAAC;CACF;AAtDD,sCAsDC"}
|
package/dist/settings.js
CHANGED
|
@@ -9,7 +9,8 @@ class Settings {
|
|
|
9
9
|
// but could happen with other clients.
|
|
10
10
|
this.defaultSettings = {
|
|
11
11
|
linter: {
|
|
12
|
-
enabled: true
|
|
12
|
+
enabled: true,
|
|
13
|
+
excludedRules: ["parser-no-errors"] // Default exclusion since parser errors are handled by ParserService
|
|
13
14
|
},
|
|
14
15
|
formatter: {
|
|
15
16
|
enabled: false,
|
package/dist/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AACA,qDAA4D;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AACA,qDAA4D;AAiB5D,MAAa,QAAQ;IA0BnB,YAAY,MAAwB,EAAE,UAAsB;QAzB5D,uGAAuG;QACvG,wGAAwG;QACxG,uCAAuC;QACvC,oBAAe,GAAiB;YAC9B,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,CAAC,kBAAkB,CAAC,CAAC,qEAAqE;aAC1G;YACD,SAAS,EAAE;gBACT,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,gCAAoB,CAAC,WAAW;gBAC7C,aAAa,EAAE,gCAAoB,CAAC,aAAa;aAClD;SACF,CAAA;QACD,mBAAc,GAAiB,IAAI,CAAC,eAAe,CAAA;QACnD,qBAAgB,GAAwC,IAAI,GAAG,EAAE,CAAA;QAEjE,+BAA0B,GAAG,KAAK,CAAA;QAClC,iCAA4B,GAAG,KAAK,CAAA;QACpC,8CAAyC,GAAG,KAAK,CAAA;QAO/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,iEAAiE;QACjE,8CAA8C;QAC9C,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QAEhH,IAAI,CAAC,4BAA4B,GAAG,CAAC,CAAC,CACpC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,gBAAgB,CAC9E,CAAA;QAED,IAAI,CAAC,yCAAyC,GAAG,CAAC,CAAC,CACjD,IAAI,CAAC,YAAY,CAAC,YAAY;YAC9B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,kBAAkB;YACjD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,kBAAkB,CAAC,kBAAkB,CACrE,CAAA;IACH,CAAC;IAED,IAAI,WAAW;;QACb,OAAO,CAAA,MAAA,MAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,0CAAE,EAAE,CAAC,CAAC,CAAC,0CAAE,GAAG,KAAI,EAAE,CAAA;IACvD,CAAC;IAED,mBAAmB,CAAC,QAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEhD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBAClD,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,oBAAoB;aAC9B,CAAC,CAAA;YAEF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC7C,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AApED,4BAoEC"}
|
package/dist/types/settings.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@herb-tools/language-server",
|
|
3
3
|
"description": "Herb HTML+ERB Language Tools and Language Server Protocol integration.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.6.0",
|
|
5
5
|
"author": "Marco Roth",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"engines": {
|
|
@@ -34,9 +34,8 @@
|
|
|
34
34
|
"clean": "rimraf dist",
|
|
35
35
|
"build": "yarn clean && tsc -b && rollup -c",
|
|
36
36
|
"dev": "tsc -b -w",
|
|
37
|
-
"test": "vitest",
|
|
38
|
-
"
|
|
39
|
-
"prepublishOnly": "yarn clean && yarn build && yarn test:run"
|
|
37
|
+
"test": "vitest run",
|
|
38
|
+
"prepublishOnly": "yarn clean && yarn build && yarn test"
|
|
40
39
|
},
|
|
41
40
|
"files": [
|
|
42
41
|
"package.json",
|
|
@@ -46,9 +45,9 @@
|
|
|
46
45
|
"dist/"
|
|
47
46
|
],
|
|
48
47
|
"dependencies": {
|
|
49
|
-
"@herb-tools/formatter": "0.
|
|
50
|
-
"@herb-tools/linter": "0.
|
|
51
|
-
"@herb-tools/node-wasm": "0.
|
|
48
|
+
"@herb-tools/formatter": "0.6.0",
|
|
49
|
+
"@herb-tools/linter": "0.6.0",
|
|
50
|
+
"@herb-tools/node-wasm": "0.6.0",
|
|
52
51
|
"dedent": "^1.6.0",
|
|
53
52
|
"vscode-languageserver": "^9.0.1",
|
|
54
53
|
"vscode-languageserver-textdocument": "^1.0.12"
|
package/src/linter_service.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { Diagnostic, DiagnosticSeverity, Range, Position, CodeDescription } from "vscode-languageserver/node"
|
|
2
2
|
import { TextDocument } from "vscode-languageserver-textdocument"
|
|
3
|
+
|
|
3
4
|
import { Linter } from "@herb-tools/linter"
|
|
4
5
|
import { Herb } from "@herb-tools/node-wasm"
|
|
5
6
|
|
|
6
7
|
import { Settings } from "./settings"
|
|
7
8
|
|
|
9
|
+
import type { LintSeverity } from "@herb-tools/linter"
|
|
10
|
+
|
|
8
11
|
export interface LintServiceResult {
|
|
9
12
|
diagnostics: Diagnostic[]
|
|
10
13
|
}
|
|
@@ -28,13 +31,10 @@ export class LinterService {
|
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
const lintResult = this.linter.lint(textDocument.getText(), { fileName: textDocument.uri })
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
lintResult.offenses.forEach(offense => {
|
|
34
|
-
const severity = offense.severity === "error"
|
|
35
|
-
? DiagnosticSeverity.Error
|
|
36
|
-
: DiagnosticSeverity.Warning
|
|
34
|
+
const excludedRules = settings?.linter?.excludedRules ?? ["parser-no-errors"]
|
|
35
|
+
const offenses = lintResult.offenses.filter(offense => !excludedRules.includes(offense.rule))
|
|
37
36
|
|
|
37
|
+
const diagnostics: Diagnostic[] = offenses.map(offense => {
|
|
38
38
|
const range = Range.create(
|
|
39
39
|
Position.create(offense.location.start.line - 1, offense.location.start.column),
|
|
40
40
|
Position.create(offense.location.end.line - 1, offense.location.end.column),
|
|
@@ -44,19 +44,26 @@ export class LinterService {
|
|
|
44
44
|
href: `https://herb-tools.dev/linter/rules/${offense.rule}`
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
return {
|
|
48
48
|
source: this.source,
|
|
49
|
-
severity,
|
|
49
|
+
severity: this.lintToDignosticSeverity(offense.severity),
|
|
50
50
|
range,
|
|
51
51
|
message: offense.message,
|
|
52
52
|
code: offense.rule,
|
|
53
53
|
data: { rule: offense.rule },
|
|
54
54
|
codeDescription
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
diagnostics.push(diagnostic)
|
|
58
56
|
})
|
|
59
57
|
|
|
60
58
|
return { diagnostics }
|
|
61
59
|
}
|
|
60
|
+
|
|
61
|
+
private lintToDignosticSeverity(severity: LintSeverity): DiagnosticSeverity {
|
|
62
|
+
switch (severity) {
|
|
63
|
+
case "error": return DiagnosticSeverity.Error
|
|
64
|
+
case "warning": return DiagnosticSeverity.Warning
|
|
65
|
+
case "info": return DiagnosticSeverity.Information
|
|
66
|
+
case "hint": return DiagnosticSeverity.Hint
|
|
67
|
+
}
|
|
68
|
+
}
|
|
62
69
|
}
|
package/src/settings.ts
CHANGED
|
@@ -7,6 +7,7 @@ export interface HerbSettings {
|
|
|
7
7
|
}
|
|
8
8
|
linter?: {
|
|
9
9
|
enabled?: boolean
|
|
10
|
+
excludedRules?: string[]
|
|
10
11
|
}
|
|
11
12
|
formatter?: {
|
|
12
13
|
enabled?: boolean
|
|
@@ -21,7 +22,8 @@ export class Settings {
|
|
|
21
22
|
// but could happen with other clients.
|
|
22
23
|
defaultSettings: HerbSettings = {
|
|
23
24
|
linter: {
|
|
24
|
-
enabled: true
|
|
25
|
+
enabled: true,
|
|
26
|
+
excludedRules: ["parser-no-errors"] // Default exclusion since parser errors are handled by ParserService
|
|
25
27
|
},
|
|
26
28
|
formatter: {
|
|
27
29
|
enabled: false,
|