@herb-tools/language-server 0.8.10 → 0.9.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/dist/action_view_helpers.js +19 -0
- package/dist/action_view_helpers.js.map +1 -0
- package/dist/autofix_service.js +1 -1
- package/dist/autofix_service.js.map +1 -1
- package/dist/code_action_service.js +3 -6
- package/dist/code_action_service.js.map +1 -1
- package/dist/comment_ast_utils.js +206 -0
- package/dist/comment_ast_utils.js.map +1 -0
- package/dist/comment_service.js +175 -0
- package/dist/comment_service.js.map +1 -0
- package/dist/diagnostics.js +0 -233
- package/dist/diagnostics.js.map +1 -1
- package/dist/document_highlight_service.js +196 -0
- package/dist/document_highlight_service.js.map +1 -0
- package/dist/document_save_service.js +16 -6
- package/dist/document_save_service.js.map +1 -1
- package/dist/folding_range_service.js +209 -0
- package/dist/folding_range_service.js.map +1 -0
- package/dist/formatting_service.js +4 -4
- package/dist/formatting_service.js.map +1 -1
- package/dist/herb-language-server.js +152936 -41156
- package/dist/herb-language-server.js.map +1 -1
- package/dist/hover_service.js +70 -0
- package/dist/hover_service.js.map +1 -0
- package/dist/index.cjs +1299 -333
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/line_context_collector.js +73 -0
- package/dist/line_context_collector.js.map +1 -0
- package/dist/linter_service.js +27 -6
- package/dist/linter_service.js.map +1 -1
- package/dist/parser_service.js +6 -5
- package/dist/parser_service.js.map +1 -1
- package/dist/range_utils.js +65 -0
- package/dist/range_utils.js.map +1 -0
- package/dist/rewrite_code_action_service.js +135 -0
- package/dist/rewrite_code_action_service.js.map +1 -0
- package/dist/server.js +39 -2
- package/dist/server.js.map +1 -1
- package/dist/service.js +10 -0
- package/dist/service.js.map +1 -1
- package/dist/types/action_view_helpers.d.ts +5 -0
- package/dist/types/comment_ast_utils.d.ts +20 -0
- package/dist/types/comment_service.d.ts +14 -0
- package/dist/types/diagnostics.d.ts +1 -35
- package/dist/types/document_highlight_service.d.ts +28 -0
- package/dist/types/document_save_service.d.ts +8 -0
- package/dist/types/folding_range_service.d.ts +35 -0
- package/dist/types/formatting_service.d.ts +1 -1
- package/dist/types/hover_service.d.ts +8 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/line_context_collector.d.ts +19 -0
- package/dist/types/linter_service.d.ts +1 -0
- package/dist/types/parser_service.d.ts +2 -1
- package/dist/types/range_utils.d.ts +16 -0
- package/dist/types/rewrite_code_action_service.d.ts +11 -0
- package/dist/types/service.d.ts +10 -0
- package/dist/types/utils.d.ts +4 -8
- package/dist/utils.js +10 -15
- package/dist/utils.js.map +1 -1
- package/package.json +10 -5
- package/src/action_view_helpers.ts +23 -0
- package/src/autofix_service.ts +1 -1
- package/src/code_action_service.ts +3 -6
- package/src/comment_ast_utils.ts +282 -0
- package/src/comment_service.ts +228 -0
- package/src/diagnostics.ts +1 -305
- package/src/document_highlight_service.ts +267 -0
- package/src/document_save_service.ts +19 -7
- package/src/folding_range_service.ts +287 -0
- package/src/formatting_service.ts +4 -4
- package/src/hover_service.ts +90 -0
- package/src/index.ts +4 -0
- package/src/line_context_collector.ts +97 -0
- package/src/linter_service.ts +35 -9
- package/src/parser_service.ts +9 -10
- package/src/range_utils.ts +90 -0
- package/src/rewrite_code_action_service.ts +165 -0
- package/src/server.ts +54 -2
- package/src/service.ts +15 -0
- package/src/utils.ts +12 -21
package/dist/parser_service.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { DiagnosticSeverity
|
|
1
|
+
import { DiagnosticSeverity } from "vscode-languageserver/node";
|
|
2
2
|
import { Herb, Visitor } from "@herb-tools/node-wasm";
|
|
3
|
+
import { lspRangeFromLocation } from "./range_utils";
|
|
3
4
|
class ErrorVisitor extends Visitor {
|
|
4
5
|
constructor() {
|
|
5
6
|
super(...arguments);
|
|
@@ -14,7 +15,7 @@ class ErrorVisitor extends Visitor {
|
|
|
14
15
|
const diagnostic = {
|
|
15
16
|
source: this.source,
|
|
16
17
|
severity: DiagnosticSeverity.Error,
|
|
17
|
-
range:
|
|
18
|
+
range: lspRangeFromLocation(error.location),
|
|
18
19
|
message: error.message,
|
|
19
20
|
code: error.type,
|
|
20
21
|
data: {
|
|
@@ -24,9 +25,6 @@ class ErrorVisitor extends Visitor {
|
|
|
24
25
|
};
|
|
25
26
|
this.diagnostics.push(diagnostic);
|
|
26
27
|
}
|
|
27
|
-
rangeFromHerbError(error) {
|
|
28
|
-
return Range.create(Position.create(error.location.start.line - 1, error.location.start.column), Position.create(error.location.end.line - 1, error.location.end.column));
|
|
29
|
-
}
|
|
30
28
|
}
|
|
31
29
|
export class ParserService {
|
|
32
30
|
parseDocument(textDocument) {
|
|
@@ -39,5 +37,8 @@ export class ParserService {
|
|
|
39
37
|
diagnostics: errorVisitor.diagnostics
|
|
40
38
|
};
|
|
41
39
|
}
|
|
40
|
+
parseContent(content, options) {
|
|
41
|
+
return Herb.parse(content, options);
|
|
42
|
+
}
|
|
42
43
|
}
|
|
43
44
|
//# sourceMappingURL=parser_service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser_service.js","sourceRoot":"","sources":["../src/parser_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"parser_service.js","sourceRoot":"","sources":["../src/parser_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAE3E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAIrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEpD,MAAM,YAAa,SAAQ,OAAO;IAAlC;;QACmB,WAAM,GAAG,cAAc,CAAA;QACjC,gBAAW,GAAiB,EAAE,CAAA;IAuBvC,CAAC;IArBC,eAAe,CAAC,IAAU;QACxB,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAE3B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IACvE,CAAC;IAEO,qBAAqB,CAAC,KAAgB,EAAE,IAAU;QACxD,MAAM,UAAU,GAAe;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,kBAAkB,CAAC,KAAK;YAClC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC3C,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE;gBACJ,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;gBACrB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;aACpB;SACF,CAAA;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACnC,CAAC;CACF;AAOD,MAAM,OAAO,aAAa;IACxB,aAAa,CAAC,YAA0B;QACtC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAElC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;QACvC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAE1B,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,KAAK;YACtB,WAAW,EAAE,YAAY,CAAC,WAAW;SACtC,CAAA;IACH,CAAC;IAED,YAAY,CAAC,OAAe,EAAE,OAAsB;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Position, Range } from "vscode-languageserver/node";
|
|
2
|
+
export function lspPosition(herbPosition) {
|
|
3
|
+
return Position.create(herbPosition.line - 1, herbPosition.column);
|
|
4
|
+
}
|
|
5
|
+
export function lspLine(herbPosition) {
|
|
6
|
+
return herbPosition.line - 1;
|
|
7
|
+
}
|
|
8
|
+
export function lspRangeFromLocation(herbLocation) {
|
|
9
|
+
return Range.create(lspPosition(herbLocation.start), lspPosition(herbLocation.end));
|
|
10
|
+
}
|
|
11
|
+
export function erbTagToRange(node) {
|
|
12
|
+
if (!node.tag_opening || !node.tag_closing)
|
|
13
|
+
return null;
|
|
14
|
+
return Range.create(lspPosition(node.tag_opening.location.start), lspPosition(node.tag_closing.location.end));
|
|
15
|
+
}
|
|
16
|
+
export function tokenToRange(token) {
|
|
17
|
+
if (!token)
|
|
18
|
+
return null;
|
|
19
|
+
return lspRangeFromLocation(token.location);
|
|
20
|
+
}
|
|
21
|
+
export function nodeToRange(node) {
|
|
22
|
+
return lspRangeFromLocation(node.location);
|
|
23
|
+
}
|
|
24
|
+
export function openTagRanges(tag) {
|
|
25
|
+
const ranges = [];
|
|
26
|
+
if (tag.tag_opening && tag.tag_name) {
|
|
27
|
+
ranges.push(Range.create(lspPosition(tag.tag_opening.location.start), lspPosition(tag.tag_name.location.end)));
|
|
28
|
+
}
|
|
29
|
+
ranges.push(tokenToRange(tag.tag_closing));
|
|
30
|
+
return ranges;
|
|
31
|
+
}
|
|
32
|
+
export function isPositionInRange(position, range) {
|
|
33
|
+
if (position.line < range.start.line || position.line > range.end.line) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
if (position.line === range.start.line && position.character < range.start.character) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (position.line === range.end.line && position.character > range.end.character) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
export function rangeSize(range) {
|
|
45
|
+
if (range.start.line === range.end.line) {
|
|
46
|
+
return range.end.character - range.start.character;
|
|
47
|
+
}
|
|
48
|
+
return (range.end.line - range.start.line) * 10000 + range.end.character;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Returns a Range that spans the entire document
|
|
52
|
+
*/
|
|
53
|
+
export function getFullDocumentRange(document) {
|
|
54
|
+
const lastLine = document.lineCount - 1;
|
|
55
|
+
const lastLineText = document.getText({
|
|
56
|
+
start: Position.create(lastLine, 0),
|
|
57
|
+
end: Position.create(lastLine + 1, 0)
|
|
58
|
+
});
|
|
59
|
+
const lastLineLength = lastLineText.length;
|
|
60
|
+
return {
|
|
61
|
+
start: Position.create(0, 0),
|
|
62
|
+
end: Position.create(lastLine, lastLineLength)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=range_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range_utils.js","sourceRoot":"","sources":["../src/range_utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { CodeActionKind, TextEdit } from "vscode-languageserver/node";
|
|
2
|
+
import { Visitor } from "@herb-tools/node-wasm";
|
|
3
|
+
import { IdentityPrinter } from "@herb-tools/printer";
|
|
4
|
+
import { ActionViewTagHelperToHTMLRewriter, HTMLToActionViewTagHelperRewriter } from "@herb-tools/rewriter";
|
|
5
|
+
import { isERBOpenTagNode, isHTMLOpenTagNode } from "@herb-tools/core";
|
|
6
|
+
import { nodeToRange } from "./range_utils";
|
|
7
|
+
class ElementCollector extends Visitor {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.actionViewElements = [];
|
|
11
|
+
this.htmlElements = [];
|
|
12
|
+
}
|
|
13
|
+
visitHTMLElementNode(node) {
|
|
14
|
+
if (node.element_source && node.element_source !== "HTML" && isERBOpenTagNode(node.open_tag)) {
|
|
15
|
+
this.actionViewElements.push({
|
|
16
|
+
node,
|
|
17
|
+
range: nodeToRange(node),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
else if (isHTMLOpenTagNode(node.open_tag) && node.open_tag.tag_name) {
|
|
21
|
+
this.htmlElements.push({
|
|
22
|
+
node,
|
|
23
|
+
range: nodeToRange(node),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
this.visitChildNodes(node);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class RewriteCodeActionService {
|
|
30
|
+
constructor(parserService) {
|
|
31
|
+
this.parserService = parserService;
|
|
32
|
+
}
|
|
33
|
+
getCodeActions(document, requestedRange) {
|
|
34
|
+
const parseResult = this.parserService.parseContent(document.getText(), {
|
|
35
|
+
action_view_helpers: true,
|
|
36
|
+
track_whitespace: true,
|
|
37
|
+
});
|
|
38
|
+
const collector = new ElementCollector();
|
|
39
|
+
collector.visit(parseResult.value);
|
|
40
|
+
const actions = [];
|
|
41
|
+
for (const element of collector.actionViewElements) {
|
|
42
|
+
if (!this.rangesOverlap(element.range, requestedRange))
|
|
43
|
+
continue;
|
|
44
|
+
const action = this.createActionViewToHTMLAction(document, element);
|
|
45
|
+
if (action) {
|
|
46
|
+
actions.push(action);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
for (const element of collector.htmlElements) {
|
|
50
|
+
if (!this.rangesOverlap(element.range, requestedRange))
|
|
51
|
+
continue;
|
|
52
|
+
const action = this.createHTMLToActionViewAction(document, element);
|
|
53
|
+
if (action) {
|
|
54
|
+
actions.push(action);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return actions;
|
|
58
|
+
}
|
|
59
|
+
createActionViewToHTMLAction(document, element) {
|
|
60
|
+
var _a;
|
|
61
|
+
const originalText = document.getText(element.range);
|
|
62
|
+
const parseResult = this.parserService.parseContent(originalText, {
|
|
63
|
+
action_view_helpers: true,
|
|
64
|
+
track_whitespace: true,
|
|
65
|
+
});
|
|
66
|
+
if (parseResult.failed)
|
|
67
|
+
return null;
|
|
68
|
+
const rewriter = new ActionViewTagHelperToHTMLRewriter();
|
|
69
|
+
rewriter.rewrite(parseResult.value, { baseDir: process.cwd() });
|
|
70
|
+
const rewrittenText = IdentityPrinter.print(parseResult.value);
|
|
71
|
+
if (rewrittenText === originalText)
|
|
72
|
+
return null;
|
|
73
|
+
const edit = {
|
|
74
|
+
changes: {
|
|
75
|
+
[document.uri]: [TextEdit.replace(element.range, rewrittenText)]
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const tagName = (_a = element.node.tag_name) === null || _a === void 0 ? void 0 : _a.value;
|
|
79
|
+
const title = tagName
|
|
80
|
+
? `Herb: Convert to \`<${tagName}>\``
|
|
81
|
+
: "Herb: Convert to HTML";
|
|
82
|
+
return {
|
|
83
|
+
title,
|
|
84
|
+
kind: CodeActionKind.RefactorRewrite,
|
|
85
|
+
edit,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
createHTMLToActionViewAction(document, element) {
|
|
89
|
+
var _a;
|
|
90
|
+
const originalText = document.getText(element.range);
|
|
91
|
+
const parseResult = this.parserService.parseContent(originalText, {
|
|
92
|
+
track_whitespace: true,
|
|
93
|
+
});
|
|
94
|
+
if (parseResult.failed)
|
|
95
|
+
return null;
|
|
96
|
+
const rewriter = new HTMLToActionViewTagHelperRewriter();
|
|
97
|
+
rewriter.rewrite(parseResult.value, { baseDir: process.cwd() });
|
|
98
|
+
const rewrittenText = IdentityPrinter.print(parseResult.value);
|
|
99
|
+
if (rewrittenText === originalText)
|
|
100
|
+
return null;
|
|
101
|
+
const edit = {
|
|
102
|
+
changes: {
|
|
103
|
+
[document.uri]: [TextEdit.replace(element.range, rewrittenText)]
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
const tagName = (_a = element.node.tag_name) === null || _a === void 0 ? void 0 : _a.value;
|
|
107
|
+
const isAnchor = tagName === "a";
|
|
108
|
+
const isTurboFrame = tagName === "turbo-frame";
|
|
109
|
+
const methodName = tagName === null || tagName === void 0 ? void 0 : tagName.replace(/-/g, "_");
|
|
110
|
+
const title = isAnchor
|
|
111
|
+
? "Herb: Convert to `link_to`"
|
|
112
|
+
: isTurboFrame
|
|
113
|
+
? "Herb: Convert to `turbo_frame_tag`"
|
|
114
|
+
: methodName
|
|
115
|
+
? `Herb: Convert to \`tag.${methodName}\``
|
|
116
|
+
: "Herb: Convert to tag helper";
|
|
117
|
+
return {
|
|
118
|
+
title,
|
|
119
|
+
kind: CodeActionKind.RefactorRewrite,
|
|
120
|
+
edit,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
rangesOverlap(r1, r2) {
|
|
124
|
+
if (r1.end.line < r2.start.line)
|
|
125
|
+
return false;
|
|
126
|
+
if (r1.start.line > r2.end.line)
|
|
127
|
+
return false;
|
|
128
|
+
if (r1.end.line === r2.start.line && r1.end.character < r2.start.character)
|
|
129
|
+
return false;
|
|
130
|
+
if (r1.start.line === r2.end.line && r1.start.character > r2.end.character)
|
|
131
|
+
return false;
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=rewrite_code_action_service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewrite_code_action_service.js","sourceRoot":"","sources":["../src/rewrite_code_action_service.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -27,8 +27,11 @@ export class Server {
|
|
|
27
27
|
documentFormattingProvider: true,
|
|
28
28
|
documentRangeFormattingProvider: true,
|
|
29
29
|
codeActionProvider: {
|
|
30
|
-
codeActionKinds: [CodeActionKind.QuickFix, CodeActionKind.SourceFixAll]
|
|
30
|
+
codeActionKinds: [CodeActionKind.QuickFix, CodeActionKind.SourceFixAll, CodeActionKind.RefactorRewrite]
|
|
31
31
|
},
|
|
32
|
+
foldingRangeProvider: true,
|
|
33
|
+
documentHighlightProvider: true,
|
|
34
|
+
hoverProvider: true,
|
|
32
35
|
},
|
|
33
36
|
};
|
|
34
37
|
if (this.service.settings.hasWorkspaceFolderCapability) {
|
|
@@ -110,15 +113,49 @@ export class Server {
|
|
|
110
113
|
this.connection.onDocumentRangeFormatting((params) => {
|
|
111
114
|
return this.service.formattingService.formatRange(params);
|
|
112
115
|
});
|
|
116
|
+
this.connection.onDocumentHighlight((params) => {
|
|
117
|
+
const document = this.service.documentService.get(params.textDocument.uri);
|
|
118
|
+
if (!document)
|
|
119
|
+
return [];
|
|
120
|
+
return this.service.documentHighlightService.getDocumentHighlights(document, params.position);
|
|
121
|
+
});
|
|
122
|
+
this.connection.onHover((params) => {
|
|
123
|
+
const document = this.service.documentService.get(params.textDocument.uri);
|
|
124
|
+
if (!document)
|
|
125
|
+
return null;
|
|
126
|
+
return this.service.hoverService.getHover(document, params.position);
|
|
127
|
+
});
|
|
113
128
|
this.connection.onCodeAction((params) => {
|
|
114
129
|
const document = this.service.documentService.get(params.textDocument.uri);
|
|
115
130
|
if (!document)
|
|
116
131
|
return [];
|
|
132
|
+
const parseResult = this.service.parserService.parseDocument(document);
|
|
133
|
+
if (parseResult.diagnostics.length > 0)
|
|
134
|
+
return [];
|
|
117
135
|
const diagnostics = params.context.diagnostics;
|
|
118
136
|
const documentText = document.getText();
|
|
119
137
|
const linterDisableCodeActions = this.service.codeActionService.createCodeActions(params.textDocument.uri, diagnostics, documentText);
|
|
120
138
|
const autofixCodeActions = this.service.codeActionService.autofixCodeActions(params, document);
|
|
121
|
-
|
|
139
|
+
const rewriteCodeActions = this.service.rewriteCodeActionService.getCodeActions(document, params.range);
|
|
140
|
+
return autofixCodeActions.concat(linterDisableCodeActions).concat(rewriteCodeActions);
|
|
141
|
+
});
|
|
142
|
+
this.connection.onFoldingRanges((params) => {
|
|
143
|
+
const document = this.service.documentService.get(params.textDocument.uri);
|
|
144
|
+
if (!document)
|
|
145
|
+
return [];
|
|
146
|
+
return this.service.foldingRangeService.getFoldingRanges(document);
|
|
147
|
+
});
|
|
148
|
+
this.connection.onRequest('herb/toggleLineComment', (params) => {
|
|
149
|
+
const document = this.service.documentService.get(params.textDocument.uri);
|
|
150
|
+
if (!document)
|
|
151
|
+
return [];
|
|
152
|
+
return this.service.commentService.toggleLineComment(document, params.range);
|
|
153
|
+
});
|
|
154
|
+
this.connection.onRequest('herb/toggleBlockComment', (params) => {
|
|
155
|
+
const document = this.service.documentService.get(params.textDocument.uri);
|
|
156
|
+
if (!document)
|
|
157
|
+
return [];
|
|
158
|
+
return this.service.commentService.toggleBlockComment(document, params.range);
|
|
122
159
|
});
|
|
123
160
|
}
|
|
124
161
|
listen() {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAEhB,kCAAkC,EAClC,iCAAiC,EACjC,oBAAoB,EACpB,sBAAsB,EAMtB,cAAc,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
CHANGED
|
@@ -10,6 +10,11 @@ import { ConfigService } from "./config_service";
|
|
|
10
10
|
import { AutofixService } from "./autofix_service";
|
|
11
11
|
import { CodeActionService } from "./code_action_service";
|
|
12
12
|
import { DocumentSaveService } from "./document_save_service";
|
|
13
|
+
import { FoldingRangeService } from "./folding_range_service";
|
|
14
|
+
import { DocumentHighlightService } from "./document_highlight_service";
|
|
15
|
+
import { HoverService } from "./hover_service";
|
|
16
|
+
import { RewriteCodeActionService } from "./rewrite_code_action_service";
|
|
17
|
+
import { CommentService } from "./comment_service";
|
|
13
18
|
import { version } from "../package.json";
|
|
14
19
|
export class Service {
|
|
15
20
|
constructor(connection, params) {
|
|
@@ -25,6 +30,11 @@ export class Service {
|
|
|
25
30
|
this.codeActionService = new CodeActionService(this.project, this.config);
|
|
26
31
|
this.diagnostics = new Diagnostics(this.connection, this.documentService, this.parserService, this.linterService, this.configService);
|
|
27
32
|
this.documentSaveService = new DocumentSaveService(this.connection, this.settings, this.autofixService, this.formattingService);
|
|
33
|
+
this.foldingRangeService = new FoldingRangeService(this.parserService);
|
|
34
|
+
this.documentHighlightService = new DocumentHighlightService(this.parserService);
|
|
35
|
+
this.hoverService = new HoverService(this.parserService);
|
|
36
|
+
this.rewriteCodeActionService = new RewriteCodeActionService(this.parserService);
|
|
37
|
+
this.commentService = new CommentService(this.parserService);
|
|
28
38
|
if (params.initializationOptions) {
|
|
29
39
|
this.settings.globalSettings = params.initializationOptions;
|
|
30
40
|
}
|
package/dist/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAwB,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ParserService } from "./parser_service";
|
|
2
|
+
import type { ERBContentNode } from "@herb-tools/core";
|
|
3
|
+
/**
|
|
4
|
+
* Commenting strategy for a line:
|
|
5
|
+
* - "single-erb": sole ERB tag on the line → insert # at column offset
|
|
6
|
+
* - "all-erb": multiple ERB tags with no significant HTML → # into each
|
|
7
|
+
* - "per-segment": control-flow ERB wrapping HTML → # each ERB, <!-- --> each HTML segment
|
|
8
|
+
* - "whole-line": output ERB mixed with HTML → wrap entire line in <!-- --> with ERB #
|
|
9
|
+
* - "html-only": pure HTML content → wrap in <!-- -->
|
|
10
|
+
*/
|
|
11
|
+
export type CommentStrategy = "single-erb" | "all-erb" | "per-segment" | "whole-line" | "html-only";
|
|
12
|
+
export declare function commentERBNode(node: ERBContentNode): void;
|
|
13
|
+
export declare function uncommentERBNode(node: ERBContentNode): void;
|
|
14
|
+
export declare function determineStrategy(erbNodes: ERBContentNode[], lineText: string): CommentStrategy;
|
|
15
|
+
/**
|
|
16
|
+
* Comment a line using AST mutation for strategies where the parser produces flat children,
|
|
17
|
+
* and text-segment manipulation for per-segment (where the parser nests nodes).
|
|
18
|
+
*/
|
|
19
|
+
export declare function commentLineContent(content: string, erbNodes: ERBContentNode[], strategy: CommentStrategy, parserService: ParserService): string;
|
|
20
|
+
export declare function uncommentLineContent(content: string, parserService: ParserService): string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TextEdit, Range } from "vscode-languageserver/node";
|
|
2
|
+
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
3
|
+
import { ParserService } from "./parser_service";
|
|
4
|
+
export declare class CommentService {
|
|
5
|
+
private parserService;
|
|
6
|
+
constructor(parserService: ParserService);
|
|
7
|
+
toggleLineComment(document: TextDocument, range: Range): TextEdit[];
|
|
8
|
+
toggleBlockComment(document: TextDocument, range: Range): TextEdit[];
|
|
9
|
+
private commentLine;
|
|
10
|
+
private lineIsIfFalseWrapped;
|
|
11
|
+
private uncommentLine;
|
|
12
|
+
private htmlCommentSpansLine;
|
|
13
|
+
private getIndentation;
|
|
14
|
+
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
2
|
-
import { Connection
|
|
3
|
-
import { Visitor } from "@herb-tools/core";
|
|
4
|
-
import type { ERBCaseNode, ERBCaseMatchNode, ERBIfNode, ERBElseNode, ERBUnlessNode, ERBForNode, ERBWhileNode, ERBUntilNode, ERBWhenNode, ERBBeginNode, ERBRescueNode, ERBEnsureNode, ERBBlockNode, ERBInNode } from "@herb-tools/core";
|
|
2
|
+
import { Connection } from "vscode-languageserver/node";
|
|
5
3
|
import { ParserService } from "./parser_service";
|
|
6
4
|
import { LinterService } from "./linter_service";
|
|
7
5
|
import { DocumentService } from "./document_service";
|
|
@@ -15,39 +13,7 @@ export declare class Diagnostics {
|
|
|
15
13
|
private diagnostics;
|
|
16
14
|
constructor(connection: Connection, documentService: DocumentService, parserService: ParserService, linterService: LinterService, configService: ConfigService);
|
|
17
15
|
validate(textDocument: TextDocument): Promise<void>;
|
|
18
|
-
private getUnreachableCodeDiagnostics;
|
|
19
16
|
refreshDocument(document: TextDocument): Promise<void>;
|
|
20
17
|
refreshAllDocuments(): Promise<void>;
|
|
21
18
|
private sendDiagnosticsFor;
|
|
22
19
|
}
|
|
23
|
-
export declare class UnreachableCodeCollector extends Visitor {
|
|
24
|
-
diagnostics: Diagnostic[];
|
|
25
|
-
private processedIfNodes;
|
|
26
|
-
private processedElseNodes;
|
|
27
|
-
visitERBCaseNode(node: ERBCaseNode): void;
|
|
28
|
-
visitERBCaseMatchNode(node: ERBCaseMatchNode): void;
|
|
29
|
-
visitERBIfNode(node: ERBIfNode): void;
|
|
30
|
-
visitERBElseNode(node: ERBElseNode): void;
|
|
31
|
-
visitERBUnlessNode(node: ERBUnlessNode): void;
|
|
32
|
-
visitERBForNode(node: ERBForNode): void;
|
|
33
|
-
visitERBWhileNode(node: ERBWhileNode): void;
|
|
34
|
-
visitERBUntilNode(node: ERBUntilNode): void;
|
|
35
|
-
visitERBWhenNode(node: ERBWhenNode): void;
|
|
36
|
-
visitERBBeginNode(node: ERBBeginNode): void;
|
|
37
|
-
visitERBRescueNode(node: ERBRescueNode): void;
|
|
38
|
-
visitERBEnsureNode(node: ERBEnsureNode): void;
|
|
39
|
-
visitERBBlockNode(node: ERBBlockNode): void;
|
|
40
|
-
visitERBInNode(node: ERBInNode): void;
|
|
41
|
-
private checkUnreachableChildren;
|
|
42
|
-
private checkEmptyStatements;
|
|
43
|
-
private checkEmptyStatementsWithEndLocation;
|
|
44
|
-
private addDiagnostic;
|
|
45
|
-
private statementsHaveContent;
|
|
46
|
-
private checkAndMarkElseClause;
|
|
47
|
-
private markIfChainAsProcessed;
|
|
48
|
-
private markElseNodesInIfChain;
|
|
49
|
-
private traverseSubsequentNodes;
|
|
50
|
-
private checkIfChainParts;
|
|
51
|
-
private isEntireIfChainEmpty;
|
|
52
|
-
private toZeroBased;
|
|
53
|
-
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DocumentHighlight, Range, Position } from "vscode-languageserver/node";
|
|
2
|
+
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
3
|
+
import { Visitor } from "@herb-tools/core";
|
|
4
|
+
import { ParserService } from "./parser_service";
|
|
5
|
+
import type { ERBNode, ERBContentNode, HTMLElementNode, HTMLConditionalElementNode, HTMLAttributeNode, HTMLCommentNode, ERBIfNode, ERBUnlessNode, ERBCaseNode, ERBCaseMatchNode, ERBBeginNode } from "@herb-tools/core";
|
|
6
|
+
export declare class DocumentHighlightCollector extends Visitor {
|
|
7
|
+
groups: Range[][];
|
|
8
|
+
private processedIfNodes;
|
|
9
|
+
visitERBNode(node: ERBNode): void;
|
|
10
|
+
visitERBContentNode(node: ERBContentNode): void;
|
|
11
|
+
visitHTMLCommentNode(node: HTMLCommentNode): void;
|
|
12
|
+
visitHTMLElementNode(node: HTMLElementNode): void;
|
|
13
|
+
visitHTMLAttributeNode(node: HTMLAttributeNode): void;
|
|
14
|
+
visitHTMLConditionalElementNode(node: HTMLConditionalElementNode): void;
|
|
15
|
+
visitERBIfNode(node: ERBIfNode): void;
|
|
16
|
+
visitERBUnlessNode(node: ERBUnlessNode): void;
|
|
17
|
+
visitERBCaseNode(node: ERBCaseNode): void;
|
|
18
|
+
visitERBCaseMatchNode(node: ERBCaseMatchNode): void;
|
|
19
|
+
visitERBAnyCaseNode(node: ERBCaseNode | ERBCaseMatchNode): void;
|
|
20
|
+
visitERBBeginNode(node: ERBBeginNode): void;
|
|
21
|
+
private markIfChainAsProcessed;
|
|
22
|
+
private addGroup;
|
|
23
|
+
}
|
|
24
|
+
export declare class DocumentHighlightService {
|
|
25
|
+
private parserService;
|
|
26
|
+
constructor(parserService: ParserService);
|
|
27
|
+
getDocumentHighlights(textDocument: TextDocument, position: Position): DocumentHighlight[];
|
|
28
|
+
}
|
|
@@ -8,6 +8,14 @@ export declare class DocumentSaveService {
|
|
|
8
8
|
private settings;
|
|
9
9
|
private autofixService;
|
|
10
10
|
private formattingService;
|
|
11
|
+
/**
|
|
12
|
+
* Tracks documents that were recently autofixed via applyFixesAndFormatting
|
|
13
|
+
* (triggered by onDocumentFormatting). When editor.formatOnSave is enabled,
|
|
14
|
+
* onDocumentFormatting fires BEFORE willSaveWaitUntil. If applyFixesAndFormatting
|
|
15
|
+
* already applied autofix, applyFixes must skip to avoid conflicting edits
|
|
16
|
+
* (since this.documents hasn't been updated between the two events).
|
|
17
|
+
*/
|
|
18
|
+
private recentlyAutofixedViaFormatting;
|
|
11
19
|
constructor(connection: Connection, settings: Settings, autofixService: AutofixService, formattingService: FormattingService);
|
|
12
20
|
/**
|
|
13
21
|
* Apply only autofix edits on save.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FoldingRange } from "vscode-languageserver/node";
|
|
2
|
+
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
3
|
+
import { Visitor } from "@herb-tools/core";
|
|
4
|
+
import { ParserService } from "./parser_service";
|
|
5
|
+
import type { ERBNode, ERBContentNode, HTMLElementNode, HTMLOpenTagNode, HTMLAttributeValueNode, HTMLCommentNode, HTMLConditionalElementNode, CDATANode, ERBIfNode, ERBUnlessNode, ERBCaseNode, ERBCaseMatchNode, ERBBeginNode, ERBRescueNode, ERBEnsureNode, ERBElseNode, ERBWhenNode, ERBInNode } from "@herb-tools/core";
|
|
6
|
+
export declare class FoldingRangeService {
|
|
7
|
+
private parserService;
|
|
8
|
+
constructor(parserService: ParserService);
|
|
9
|
+
getFoldingRanges(textDocument: TextDocument): FoldingRange[];
|
|
10
|
+
}
|
|
11
|
+
export declare class FoldingRangeCollector extends Visitor {
|
|
12
|
+
ranges: FoldingRange[];
|
|
13
|
+
private processedIfNodes;
|
|
14
|
+
visitHTMLElementNode(node: HTMLElementNode): void;
|
|
15
|
+
visitHTMLOpenTagNode(node: HTMLOpenTagNode): void;
|
|
16
|
+
visitHTMLCommentNode(node: HTMLCommentNode): void;
|
|
17
|
+
visitHTMLAttributeValueNode(node: HTMLAttributeValueNode): void;
|
|
18
|
+
visitCDATANode(node: CDATANode): void;
|
|
19
|
+
visitHTMLConditionalElementNode(node: HTMLConditionalElementNode): void;
|
|
20
|
+
visitERBNode(node: ERBNode): void;
|
|
21
|
+
visitERBContentNode(node: ERBContentNode): void;
|
|
22
|
+
visitERBIfNode(node: ERBIfNode): void;
|
|
23
|
+
visitERBUnlessNode(node: ERBUnlessNode): void;
|
|
24
|
+
visitERBCaseNode(node: ERBCaseNode): void;
|
|
25
|
+
visitERBCaseMatchNode(node: ERBCaseMatchNode): void;
|
|
26
|
+
visitERBWhenNode(node: ERBWhenNode): void;
|
|
27
|
+
visitERBInNode(node: ERBInNode): void;
|
|
28
|
+
visitERBBeginNode(node: ERBBeginNode): void;
|
|
29
|
+
visitERBRescueNode(node: ERBRescueNode): void;
|
|
30
|
+
visitERBElseNode(node: ERBElseNode): void;
|
|
31
|
+
visitERBEnsureNode(node: ERBEnsureNode): void;
|
|
32
|
+
private markIfChainAsProcessed;
|
|
33
|
+
private addCaseFoldingRanges;
|
|
34
|
+
private addRange;
|
|
35
|
+
}
|
|
@@ -16,7 +16,7 @@ export declare class FormattingService {
|
|
|
16
16
|
initialize(): Promise<void>;
|
|
17
17
|
refreshConfig(config?: Config): Promise<void>;
|
|
18
18
|
private loadConfiguredRewriters;
|
|
19
|
-
formatOnSave(document: TextDocument, reason: TextDocumentSaveReason): Promise<TextEdit[]>;
|
|
19
|
+
formatOnSave(document: TextDocument, reason: TextDocumentSaveReason, textOverride?: string): Promise<TextEdit[]>;
|
|
20
20
|
private shouldFormatFile;
|
|
21
21
|
private getConfigWithSettings;
|
|
22
22
|
private performFormatting;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Hover, Position } from "vscode-languageserver/node";
|
|
2
|
+
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
3
|
+
import { ParserService } from "./parser_service";
|
|
4
|
+
export declare class HoverService {
|
|
5
|
+
private parserService;
|
|
6
|
+
constructor(parserService: ParserService);
|
|
7
|
+
getHover(textDocument: TextDocument, position: Position): Hover | null;
|
|
8
|
+
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -3,7 +3,11 @@ export * from "./service";
|
|
|
3
3
|
export * from "./diagnostics";
|
|
4
4
|
export * from "./document_service";
|
|
5
5
|
export * from "./formatting_service";
|
|
6
|
+
export * from "./folding_range_service";
|
|
6
7
|
export * from "./project";
|
|
7
8
|
export * from "./settings";
|
|
8
9
|
export * from "./utils";
|
|
10
|
+
export * from "./range_utils";
|
|
9
11
|
export * from "./cli";
|
|
12
|
+
export * from "./document_highlight_service";
|
|
13
|
+
export * from "./comment_service";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Visitor, HTMLCommentNode } from "@herb-tools/core";
|
|
2
|
+
import type { Node, ERBNode, ERBContentNode, HTMLTextNode, HTMLElementNode } from "@herb-tools/core";
|
|
3
|
+
export type LineContext = "erb-comment" | "html-comment" | "erb-tag" | "html-content" | "empty";
|
|
4
|
+
export interface LineInfo {
|
|
5
|
+
line: number;
|
|
6
|
+
context: LineContext;
|
|
7
|
+
node: Node | null;
|
|
8
|
+
}
|
|
9
|
+
export declare class LineContextCollector extends Visitor {
|
|
10
|
+
lineMap: Map<number, LineInfo>;
|
|
11
|
+
erbNodesPerLine: Map<number, ERBContentNode[]>;
|
|
12
|
+
htmlCommentNodesPerLine: Map<number, HTMLCommentNode>;
|
|
13
|
+
visitERBNode(node: ERBNode): void;
|
|
14
|
+
visitERBContentNode(node: ERBContentNode): void;
|
|
15
|
+
visitHTMLCommentNode(node: HTMLCommentNode): void;
|
|
16
|
+
visitHTMLElementNode(node: HTMLElementNode): void;
|
|
17
|
+
visitHTMLTextNode(node: HTMLTextNode): void;
|
|
18
|
+
private setLine;
|
|
19
|
+
}
|