@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.
Files changed (82) hide show
  1. package/dist/action_view_helpers.js +19 -0
  2. package/dist/action_view_helpers.js.map +1 -0
  3. package/dist/autofix_service.js +1 -1
  4. package/dist/autofix_service.js.map +1 -1
  5. package/dist/code_action_service.js +3 -6
  6. package/dist/code_action_service.js.map +1 -1
  7. package/dist/comment_ast_utils.js +206 -0
  8. package/dist/comment_ast_utils.js.map +1 -0
  9. package/dist/comment_service.js +175 -0
  10. package/dist/comment_service.js.map +1 -0
  11. package/dist/diagnostics.js +15 -27
  12. package/dist/diagnostics.js.map +1 -1
  13. package/dist/document_highlight_service.js +196 -0
  14. package/dist/document_highlight_service.js.map +1 -0
  15. package/dist/document_save_service.js +16 -6
  16. package/dist/document_save_service.js.map +1 -1
  17. package/dist/folding_range_service.js +209 -0
  18. package/dist/folding_range_service.js.map +1 -0
  19. package/dist/formatting_service.js +4 -7
  20. package/dist/formatting_service.js.map +1 -1
  21. package/dist/herb-language-server.js +150276 -41207
  22. package/dist/herb-language-server.js.map +1 -1
  23. package/dist/hover_service.js +70 -0
  24. package/dist/hover_service.js.map +1 -0
  25. package/dist/index.cjs +1227 -66
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.js +4 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/line_context_collector.js +73 -0
  30. package/dist/line_context_collector.js.map +1 -0
  31. package/dist/linter_service.js +20 -4
  32. package/dist/linter_service.js.map +1 -1
  33. package/dist/parser_service.js +6 -5
  34. package/dist/parser_service.js.map +1 -1
  35. package/dist/range_utils.js +65 -0
  36. package/dist/range_utils.js.map +1 -0
  37. package/dist/rewrite_code_action_service.js +135 -0
  38. package/dist/rewrite_code_action_service.js.map +1 -0
  39. package/dist/server.js +36 -2
  40. package/dist/server.js.map +1 -1
  41. package/dist/service.js +10 -0
  42. package/dist/service.js.map +1 -1
  43. package/dist/types/action_view_helpers.d.ts +5 -0
  44. package/dist/types/comment_ast_utils.d.ts +20 -0
  45. package/dist/types/comment_service.d.ts +14 -0
  46. package/dist/types/diagnostics.d.ts +0 -1
  47. package/dist/types/document_highlight_service.d.ts +28 -0
  48. package/dist/types/document_save_service.d.ts +8 -0
  49. package/dist/types/folding_range_service.d.ts +35 -0
  50. package/dist/types/formatting_service.d.ts +1 -1
  51. package/dist/types/hover_service.d.ts +8 -0
  52. package/dist/types/index.d.ts +4 -0
  53. package/dist/types/line_context_collector.d.ts +19 -0
  54. package/dist/types/linter_service.d.ts +1 -0
  55. package/dist/types/parser_service.d.ts +2 -1
  56. package/dist/types/range_utils.d.ts +16 -0
  57. package/dist/types/rewrite_code_action_service.d.ts +11 -0
  58. package/dist/types/service.d.ts +10 -0
  59. package/dist/types/utils.d.ts +0 -6
  60. package/dist/utils.js +0 -16
  61. package/dist/utils.js.map +1 -1
  62. package/package.json +10 -5
  63. package/src/action_view_helpers.ts +23 -0
  64. package/src/autofix_service.ts +1 -1
  65. package/src/code_action_service.ts +3 -6
  66. package/src/comment_ast_utils.ts +282 -0
  67. package/src/comment_service.ts +228 -0
  68. package/src/diagnostics.ts +24 -38
  69. package/src/document_highlight_service.ts +267 -0
  70. package/src/document_save_service.ts +19 -7
  71. package/src/folding_range_service.ts +287 -0
  72. package/src/formatting_service.ts +4 -8
  73. package/src/hover_service.ts +90 -0
  74. package/src/index.ts +4 -0
  75. package/src/line_context_collector.ts +97 -0
  76. package/src/linter_service.ts +25 -7
  77. package/src/parser_service.ts +9 -10
  78. package/src/range_utils.ts +90 -0
  79. package/src/rewrite_code_action_service.ts +165 -0
  80. package/src/server.ts +51 -2
  81. package/src/service.ts +15 -0
  82. package/src/utils.ts +0 -22
@@ -1,5 +1,6 @@
1
- import { DiagnosticSeverity, Range, Position } from "vscode-languageserver/node";
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: this.rangeFromHerbError(error),
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,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAE5F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAIrD,MAAM,YAAa,SAAQ,OAAO;IAAlC;;QACmB,WAAM,GAAG,cAAc,CAAA;QACjC,gBAAW,GAAiB,EAAE,CAAA;IA8BvC,CAAC;IA5BC,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,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACrC,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;IAEO,kBAAkB,CAAC,KAAgB;QACzC,OAAO,KAAK,CAAC,MAAM,CACjB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAC3E,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CACxE,CAAA;IACH,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;CACF"}
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":"AAAA,OAAO,EAAc,cAAc,EAAE,QAAQ,EAAwB,MAAM,4BAA4B,CAAA;AAGvG,OAAO,EAAE,OAAO,EAAQ,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,iCAAiC,EAAE,iCAAiC,EAAE,MAAM,sBAAsB,CAAA;AAC3G,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAS3C,MAAM,gBAAiB,SAAQ,OAAO;IAAtC;;QACS,uBAAkB,GAAuB,EAAE,CAAA;QAC3C,iBAAY,GAAuB,EAAE,CAAA;IAiB9C,CAAC;IAfC,oBAAoB,CAAC,IAAqB;QACxC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7F,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAC3B,IAAI;gBACJ,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC;aACzB,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACrB,IAAI;gBACJ,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC;aACzB,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,wBAAwB;IAGnC,YAAY,aAA4B;QACtC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,CAAC;IAED,cAAc,CAAC,QAAsB,EAAE,cAAqB;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;YACtE,mBAAmB,EAAE,IAAI;YACzB,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAA;QACxC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAElC,MAAM,OAAO,GAAiB,EAAE,CAAA;QAEhC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,kBAAkB,EAAE,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC;gBAAE,SAAQ;YAEhE,MAAM,MAAM,GAAG,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAEnE,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC;gBAAE,SAAQ;YAEhE,MAAM,MAAM,GAAG,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAEnE,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,4BAA4B,CAAC,QAAsB,EAAE,OAAyB;;QACpF,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE;YAChE,mBAAmB,EAAE,IAAI;YACzB,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAA;QAEF,IAAI,WAAW,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAEnC,MAAM,QAAQ,GAAG,IAAI,iCAAiC,EAAE,CAAA;QACxD,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,KAAa,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAEvE,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAE9D,IAAI,aAAa,KAAK,YAAY;YAAE,OAAO,IAAI,CAAA;QAE/C,MAAM,IAAI,GAAkB;YAC1B,OAAO,EAAE;gBACP,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;aACjE;SACF,CAAA;QAED,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,0CAAE,KAAK,CAAA;QAC5C,MAAM,KAAK,GAAG,OAAO;YACnB,CAAC,CAAC,uBAAuB,OAAO,KAAK;YACrC,CAAC,CAAC,uBAAuB,CAAA;QAE3B,OAAO;YACL,KAAK;YACL,IAAI,EAAE,cAAc,CAAC,eAAe;YACpC,IAAI;SACL,CAAA;IACH,CAAC;IAEO,4BAA4B,CAAC,QAAsB,EAAE,OAAyB;;QACpF,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE;YAChE,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAA;QAEF,IAAI,WAAW,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAEnC,MAAM,QAAQ,GAAG,IAAI,iCAAiC,EAAE,CAAA;QACxD,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,KAAa,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAEvE,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAE9D,IAAI,aAAa,KAAK,YAAY;YAAE,OAAO,IAAI,CAAA;QAE/C,MAAM,IAAI,GAAkB;YAC1B,OAAO,EAAE;gBACP,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;aACjE;SACF,CAAA;QAED,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,0CAAE,KAAK,CAAA;QAC5C,MAAM,QAAQ,GAAG,OAAO,KAAK,GAAG,CAAA;QAChC,MAAM,YAAY,GAAG,OAAO,KAAK,aAAa,CAAA;QAC9C,MAAM,UAAU,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,QAAQ;YACpB,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,YAAY;gBACZ,CAAC,CAAC,oCAAoC;gBACtC,CAAC,CAAC,UAAU;oBACV,CAAC,CAAC,0BAA0B,UAAU,IAAI;oBAC1C,CAAC,CAAC,6BAA6B,CAAA;QAErC,OAAO;YACL,KAAK;YACL,IAAI,EAAE,cAAc,CAAC,eAAe;YACpC,IAAI;SACL,CAAA;IACH,CAAC;IAEO,aAAa,CAAC,EAAS,EAAE,EAAS;QACxC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QAC7C,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QAE7C,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,KAAK,CAAA;QACxF,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS;YAAE,OAAO,KAAK,CAAA;QAExF,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
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
- return autofixCodeActions.concat(linterDisableCodeActions);
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() {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface ActionViewHelperInfo {
2
+ signature: string;
3
+ documentationURL: string;
4
+ }
5
+ export declare const ACTION_VIEW_HELPERS: Record<string, ActionViewHelperInfo>;
@@ -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
+ }
@@ -49,5 +49,4 @@ export declare class UnreachableCodeCollector extends Visitor {
49
49
  private traverseSubsequentNodes;
50
50
  private checkIfChainParts;
51
51
  private isEntireIfChainEmpty;
52
- private toZeroBased;
53
52
  }
@@ -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
+ }
@@ -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
+ }
@@ -30,5 +30,6 @@ export declare class LinterService {
30
30
  * Show warning message to user about failed custom rules
31
31
  */
32
32
  private showCustomRuleWarnings;
33
+ private shouldLintFile;
33
34
  lintDocument(textDocument: TextDocument): Promise<LintServiceResult>;
34
35
  }
@@ -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;