@herb-tools/language-server 0.8.9 → 0.9.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/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 +15 -27
- 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 -7
- package/dist/formatting_service.js.map +1 -1
- package/dist/herb-language-server.js +150276 -41207
- 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 +1227 -66
- 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 +20 -4
- 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 +36 -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 +0 -1
- 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 +0 -6
- package/dist/utils.js +0 -16
- 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 +24 -38
- 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 -8
- 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 +25 -7
- 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 +51 -2
- package/src/service.ts +15 -0
- package/src/utils.ts +0 -22
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,6 +113,18 @@ 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)
|
|
@@ -118,7 +133,26 @@ export class Server {
|
|
|
118
133
|
const documentText = document.getText();
|
|
119
134
|
const linterDisableCodeActions = this.service.codeActionService.createCodeActions(params.textDocument.uri, diagnostics, documentText);
|
|
120
135
|
const autofixCodeActions = this.service.codeActionService.autofixCodeActions(params, document);
|
|
121
|
-
|
|
136
|
+
const rewriteCodeActions = this.service.rewriteCodeActionService.getCodeActions(document, params.range);
|
|
137
|
+
return autofixCodeActions.concat(linterDisableCodeActions).concat(rewriteCodeActions);
|
|
138
|
+
});
|
|
139
|
+
this.connection.onFoldingRanges((params) => {
|
|
140
|
+
const document = this.service.documentService.get(params.textDocument.uri);
|
|
141
|
+
if (!document)
|
|
142
|
+
return [];
|
|
143
|
+
return this.service.foldingRangeService.getFoldingRanges(document);
|
|
144
|
+
});
|
|
145
|
+
this.connection.onRequest('herb/toggleLineComment', (params) => {
|
|
146
|
+
const document = this.service.documentService.get(params.textDocument.uri);
|
|
147
|
+
if (!document)
|
|
148
|
+
return [];
|
|
149
|
+
return this.service.commentService.toggleLineComment(document, params.range);
|
|
150
|
+
});
|
|
151
|
+
this.connection.onRequest('herb/toggleBlockComment', (params) => {
|
|
152
|
+
const document = this.service.documentService.get(params.textDocument.uri);
|
|
153
|
+
if (!document)
|
|
154
|
+
return [];
|
|
155
|
+
return this.service.commentService.toggleBlockComment(document, params.range);
|
|
122
156
|
});
|
|
123
157
|
}
|
|
124
158
|
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
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Diagnostic } from "vscode-languageserver/node";
|
|
2
2
|
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
3
|
-
import type { DocumentNode } from "@herb-tools/node-wasm";
|
|
3
|
+
import type { DocumentNode, ParseResult, ParseOptions } from "@herb-tools/node-wasm";
|
|
4
4
|
export interface ParseServiceResult {
|
|
5
5
|
document: DocumentNode;
|
|
6
6
|
diagnostics: Diagnostic[];
|
|
7
7
|
}
|
|
8
8
|
export declare class ParserService {
|
|
9
9
|
parseDocument(textDocument: TextDocument): ParseServiceResult;
|
|
10
|
+
parseContent(content: string, options?: ParseOptions): ParseResult;
|
|
10
11
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Position, Range } from "vscode-languageserver/node";
|
|
2
|
+
import type { TextDocument } from "vscode-languageserver-textdocument";
|
|
3
|
+
import type { SerializedPosition, SerializedLocation, Node, Token, ERBNode, HTMLOpenTagNode } from "@herb-tools/core";
|
|
4
|
+
export declare function lspPosition(herbPosition: SerializedPosition): Position;
|
|
5
|
+
export declare function lspLine(herbPosition: SerializedPosition): number;
|
|
6
|
+
export declare function lspRangeFromLocation(herbLocation: SerializedLocation): Range;
|
|
7
|
+
export declare function erbTagToRange(node: ERBNode): Range | null;
|
|
8
|
+
export declare function tokenToRange(token: Token | null): Range | null;
|
|
9
|
+
export declare function nodeToRange(node: Node): Range;
|
|
10
|
+
export declare function openTagRanges(tag: HTMLOpenTagNode): (Range | null)[];
|
|
11
|
+
export declare function isPositionInRange(position: Position, range: Range): boolean;
|
|
12
|
+
export declare function rangeSize(range: Range): number;
|
|
13
|
+
/**
|
|
14
|
+
* Returns a Range that spans the entire document
|
|
15
|
+
*/
|
|
16
|
+
export declare function getFullDocumentRange(document: TextDocument): Range;
|