@herb-tools/language-server 0.3.1 → 0.4.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.
Files changed (52) hide show
  1. package/README.md +74 -7
  2. package/bin/herb-language-server +0 -16
  3. package/dist/cli.js +27 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/diagnostics.js +17 -50
  7. package/dist/diagnostics.js.map +1 -1
  8. package/dist/formatting_service.js +124 -0
  9. package/dist/formatting_service.js.map +1 -0
  10. package/dist/herb-language-server.js +16118 -6762
  11. package/dist/herb-language-server.js.map +1 -1
  12. package/dist/index.cjs +29900 -0
  13. package/dist/index.cjs.map +1 -0
  14. package/dist/index.js +27 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/linter_service.js +44 -0
  17. package/dist/linter_service.js.map +1 -0
  18. package/dist/parser_service.js +47 -0
  19. package/dist/parser_service.js.map +1 -0
  20. package/dist/project.js +2 -1
  21. package/dist/project.js.map +1 -1
  22. package/dist/server.js +72 -61
  23. package/dist/server.js.map +1 -1
  24. package/dist/service.js +16 -4
  25. package/dist/service.js.map +1 -1
  26. package/dist/settings.js +11 -1
  27. package/dist/settings.js.map +1 -1
  28. package/dist/types/cli.d.ts +4 -0
  29. package/dist/types/config.d.ts +9 -1
  30. package/dist/types/diagnostics.d.ts +9 -7
  31. package/dist/types/formatting_service.d.ts +19 -0
  32. package/dist/types/herb-language-server.d.ts +2 -0
  33. package/dist/types/index.d.ts +10 -0
  34. package/dist/types/linter_service.d.ts +14 -0
  35. package/dist/types/parser_service.d.ts +10 -0
  36. package/dist/types/project.d.ts +2 -0
  37. package/dist/types/server.d.ts +7 -1
  38. package/dist/types/service.d.ts +6 -0
  39. package/dist/types/settings.d.ts +11 -0
  40. package/package.json +22 -24
  41. package/src/cli.ts +23 -0
  42. package/src/config.ts +9 -1
  43. package/src/diagnostics.ts +22 -79
  44. package/src/formatting_service.ts +150 -0
  45. package/src/herb-language-server.ts +6 -0
  46. package/src/index.ts +10 -0
  47. package/src/linter_service.ts +63 -0
  48. package/src/parser_service.ts +59 -0
  49. package/src/project.ts +4 -2
  50. package/src/server.ts +83 -65
  51. package/src/service.ts +21 -6
  52. package/src/settings.ts +24 -2
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./server"), exports);
18
+ __exportStar(require("./service"), exports);
19
+ __exportStar(require("./config"), exports);
20
+ __exportStar(require("./diagnostics"), exports);
21
+ __exportStar(require("./document_service"), exports);
22
+ __exportStar(require("./formatting_service"), exports);
23
+ __exportStar(require("./project"), exports);
24
+ __exportStar(require("./settings"), exports);
25
+ __exportStar(require("./utils"), exports);
26
+ __exportStar(require("./cli"), exports);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,4CAAyB;AACzB,2CAAwB;AACxB,gDAA6B;AAC7B,qDAAkC;AAClC,uDAAoC;AACpC,4CAAyB;AACzB,6CAA0B;AAC1B,0CAAuB;AACvB,wCAAqB"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LinterService = void 0;
4
+ const node_1 = require("vscode-languageserver/node");
5
+ const linter_1 = require("@herb-tools/linter");
6
+ class LinterService {
7
+ constructor(settings) {
8
+ this.source = "Herb Linter ";
9
+ this.settings = settings;
10
+ this.linter = new linter_1.Linter();
11
+ }
12
+ async lintDocument(document, textDocument) {
13
+ var _a, _b;
14
+ const settings = await this.settings.getDocumentSettings(textDocument.uri);
15
+ const linterEnabled = (_b = (_a = settings === null || settings === void 0 ? void 0 : settings.linter) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : true;
16
+ if (!linterEnabled) {
17
+ return { diagnostics: [] };
18
+ }
19
+ const lintResult = this.linter.lint(document);
20
+ const diagnostics = [];
21
+ lintResult.offenses.forEach(offense => {
22
+ const severity = offense.severity === "error"
23
+ ? node_1.DiagnosticSeverity.Error
24
+ : node_1.DiagnosticSeverity.Warning;
25
+ const range = node_1.Range.create(node_1.Position.create(offense.location.start.line - 1, offense.location.start.column), node_1.Position.create(offense.location.end.line - 1, offense.location.end.column));
26
+ const codeDescription = {
27
+ href: `https://herb-tools.dev/linter/rules/${offense.rule}`
28
+ };
29
+ const diagnostic = {
30
+ source: this.source,
31
+ severity,
32
+ range,
33
+ message: offense.message,
34
+ code: offense.rule,
35
+ data: { rule: offense.rule },
36
+ codeDescription
37
+ };
38
+ diagnostics.push(diagnostic);
39
+ });
40
+ return { diagnostics };
41
+ }
42
+ }
43
+ exports.LinterService = LinterService;
44
+ //# sourceMappingURL=linter_service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter_service.js","sourceRoot":"","sources":["../src/linter_service.ts"],"names":[],"mappings":";;;AAAA,qDAA6G;AAE7G,+CAA2C;AAU3C,MAAa,aAAa;IAKxB,YAAY,QAAkB;QAHb,WAAM,GAAG,cAAc,CAAA;QAItC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,EAAE,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAsB,EAAE,YAA0B;;QACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAC1E,MAAM,aAAa,GAAG,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,0CAAE,OAAO,mCAAI,IAAI,CAAA;QAEvD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAA;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC7C,MAAM,WAAW,GAAiB,EAAE,CAAA;QAEpC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAC3C,CAAC,CAAC,yBAAkB,CAAC,KAAK;gBAC1B,CAAC,CAAC,yBAAkB,CAAC,OAAO,CAAA;YAE9B,MAAM,KAAK,GAAG,YAAK,CAAC,MAAM,CACxB,eAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAC/E,eAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAC5E,CAAA;YAED,MAAM,eAAe,GAAoB;gBACvC,IAAI,EAAE,uCAAuC,OAAO,CAAC,IAAI,EAAE;aAC5D,CAAA;YAED,MAAM,UAAU,GAAe;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ;gBACR,KAAK;gBACL,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;gBAC5B,eAAe;aAChB,CAAA;YAED,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,OAAO,EAAE,WAAW,EAAE,CAAA;IACxB,CAAC;CACF;AAlDD,sCAkDC"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParserService = void 0;
4
+ const node_1 = require("vscode-languageserver/node");
5
+ const node_wasm_1 = require("@herb-tools/node-wasm");
6
+ class ErrorVisitor extends node_wasm_1.Visitor {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.source = "Herb Parser ";
10
+ this.diagnostics = [];
11
+ }
12
+ visitChildNodes(node) {
13
+ super.visitChildNodes(node);
14
+ node.errors.forEach(error => this.addDiagnosticForError(error, node));
15
+ }
16
+ addDiagnosticForError(error, node) {
17
+ const diagnostic = {
18
+ source: this.source,
19
+ severity: node_1.DiagnosticSeverity.Error,
20
+ range: this.rangeFromHerbError(error),
21
+ message: error.message,
22
+ code: error.type,
23
+ data: {
24
+ error: error.toJSON(),
25
+ node: node.toJSON()
26
+ }
27
+ };
28
+ this.diagnostics.push(diagnostic);
29
+ }
30
+ rangeFromHerbError(error) {
31
+ return node_1.Range.create(node_1.Position.create(error.location.start.line - 1, error.location.start.column), node_1.Position.create(error.location.end.line - 1, error.location.end.column));
32
+ }
33
+ }
34
+ class ParserService {
35
+ parseDocument(textDocument) {
36
+ const content = textDocument.getText();
37
+ const result = node_wasm_1.Herb.parse(content);
38
+ const errorVisitor = new ErrorVisitor();
39
+ result.visit(errorVisitor);
40
+ return {
41
+ document: result.value,
42
+ diagnostics: errorVisitor.diagnostics
43
+ };
44
+ }
45
+ }
46
+ exports.ParserService = ParserService;
47
+ //# sourceMappingURL=parser_service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser_service.js","sourceRoot":"","sources":["../src/parser_service.ts"],"names":[],"mappings":";;;AAAA,qDAA4F;AAE5F,qDAAqD;AAIrD,MAAM,YAAa,SAAQ,mBAAO;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,yBAAkB,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,YAAK,CAAC,MAAM,CACjB,eAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAC3E,eAAQ,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,MAAa,aAAa;IACxB,aAAa,CAAC,YAA0B;QACtC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA;QACtC,MAAM,MAAM,GAAG,gBAAI,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;AAbD,sCAaC"}
package/dist/project.js CHANGED
@@ -6,9 +6,10 @@ class Project {
6
6
  constructor(connection, projectPath) {
7
7
  this.projectPath = projectPath;
8
8
  this.connection = connection;
9
+ this.herbBackend = node_wasm_1.Herb;
9
10
  }
10
11
  async initialize() {
11
- await node_wasm_1.Herb.load();
12
+ await this.herbBackend.load();
12
13
  }
13
14
  async refresh() {
14
15
  // TODO
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":";;;AAAA,qDAA4C;AAG5C,MAAa,OAAO;IAIlB,YAAY,UAAsB,EAAE,WAAmB;QACrD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,gBAAI,CAAC,IAAI,EAAE,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO;IACT,CAAC;CACF;AAhBD,0BAgBC"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":";;;AAAA,qDAAyD;AAGzD,MAAa,OAAO;IAKlB,YAAY,UAAsB,EAAE,WAAmB;QACrD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,WAAW,GAAG,gBAAI,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO;IACT,CAAC;CACF;AAlBD,0BAkBC"}
package/dist/server.js CHANGED
@@ -1,70 +1,81 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Server = void 0;
3
4
  const node_1 = require("vscode-languageserver/node");
4
5
  const service_1 = require("./service");
5
- let service;
6
- const connection = (0, node_1.createConnection)(node_1.ProposedFeatures.all);
7
- connection.onInitialize(async (params) => {
8
- service = new service_1.Service(connection, params);
9
- await service.init();
10
- const result = {
11
- capabilities: {
12
- textDocumentSync: node_1.TextDocumentSyncKind.Incremental,
13
- },
14
- };
15
- if (service.settings.hasWorkspaceFolderCapability) {
16
- result.capabilities.workspace = {
17
- workspaceFolders: {
18
- supported: true,
19
- },
20
- };
6
+ class Server {
7
+ constructor() {
8
+ this.connection = (0, node_1.createConnection)(node_1.ProposedFeatures.all);
9
+ this.setupEventHandlers();
21
10
  }
22
- return result;
23
- });
24
- connection.onInitialized(() => {
25
- if (service.settings.hasConfigurationCapability) {
26
- // Register for all configuration changes.
27
- connection.client.register(node_1.DidChangeConfigurationNotification.type, undefined);
28
- }
29
- if (service.settings.hasWorkspaceFolderCapability) {
30
- connection.workspace.onDidChangeWorkspaceFolders((_event) => {
31
- connection.console.log("Workspace folder change event received.");
11
+ setupEventHandlers() {
12
+ this.connection.onInitialize(async (params) => {
13
+ this.service = new service_1.Service(this.connection, params);
14
+ await this.service.init();
15
+ const result = {
16
+ capabilities: {
17
+ textDocumentSync: node_1.TextDocumentSyncKind.Incremental,
18
+ documentFormattingProvider: true,
19
+ },
20
+ };
21
+ if (this.service.settings.hasWorkspaceFolderCapability) {
22
+ result.capabilities.workspace = {
23
+ workspaceFolders: {
24
+ supported: true,
25
+ },
26
+ };
27
+ }
28
+ return result;
29
+ });
30
+ this.connection.onInitialized(() => {
31
+ if (this.service.settings.hasConfigurationCapability) {
32
+ // Register for all configuration changes.
33
+ this.connection.client.register(node_1.DidChangeConfigurationNotification.type, undefined);
34
+ }
35
+ if (this.service.settings.hasWorkspaceFolderCapability) {
36
+ this.connection.workspace.onDidChangeWorkspaceFolders((_event) => {
37
+ this.connection.console.log("Workspace folder change event received.");
38
+ });
39
+ }
40
+ this.connection.client.register(node_1.DidChangeWatchedFilesNotification.type, {
41
+ watchers: [
42
+ { globPattern: `**/**/*.html.erb` },
43
+ { globPattern: `**/**/.herb-lsp/config.json` },
44
+ ],
45
+ });
46
+ });
47
+ this.connection.onDidChangeConfiguration(async (change) => {
48
+ if (this.service.settings.hasConfigurationCapability) {
49
+ // Reset all cached document settings
50
+ this.service.settings.documentSettings.clear();
51
+ }
52
+ else {
53
+ this.service.settings.globalSettings = ((change.settings.languageServerHerb || this.service.settings.defaultSettings));
54
+ }
55
+ await this.service.refresh();
56
+ });
57
+ this.connection.onDidOpenTextDocument(async (params) => {
58
+ const document = this.service.documentService.get(params.textDocument.uri);
59
+ if (document) {
60
+ await this.service.diagnostics.refreshDocument(document);
61
+ }
62
+ });
63
+ this.connection.onDidChangeWatchedFiles((params) => {
64
+ params.changes.forEach(async (event) => {
65
+ if (event.uri.endsWith("/.herb-lsp/config.json")) {
66
+ await this.service.refreshConfig();
67
+ const documents = this.service.documentService.getAll();
68
+ await Promise.all(documents.map(document => this.service.diagnostics.refreshDocument(document)));
69
+ }
70
+ });
71
+ });
72
+ this.connection.onDocumentFormatting((params) => {
73
+ return this.service.formatting.formatDocument(params);
32
74
  });
33
75
  }
34
- connection.client.register(node_1.DidChangeWatchedFilesNotification.type, {
35
- watchers: [
36
- { globPattern: `**/**/*.html.erb` },
37
- { globPattern: `**/**/.herb-lsp/config.json` },
38
- ],
39
- });
40
- });
41
- connection.onDidChangeConfiguration((change) => {
42
- if (service.settings.hasConfigurationCapability) {
43
- // Reset all cached document settings
44
- service.settings.documentSettings.clear();
45
- }
46
- else {
47
- service.settings.globalSettings = ((change.settings.languageServerHerb || service.settings.defaultSettings));
48
- }
49
- service.refresh();
50
- });
51
- connection.onDidOpenTextDocument((params) => {
52
- console.error(params);
53
- const document = service.documentService.get(params.textDocument.uri);
54
- if (document) {
55
- service.diagnostics.refreshDocument(document);
76
+ listen() {
77
+ this.connection.listen();
56
78
  }
57
- });
58
- connection.onDidChangeWatchedFiles((params) => {
59
- params.changes.forEach(async (event) => {
60
- if (event.uri.endsWith("/.herb-lsp/config.json")) {
61
- await service.refreshConfig();
62
- service.documentService.getAll().forEach((document) => {
63
- service.diagnostics.refreshDocument(document);
64
- });
65
- }
66
- });
67
- });
68
- // Listen on the connection
69
- connection.listen();
79
+ }
80
+ exports.Server = Server;
70
81
  //# sourceMappingURL=server.js.map
@@ -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":";;;AAAA,qDAUmC;AAEnC,uCAAmC;AAGnC,MAAa,MAAM;IAIjB;QACE,IAAI,CAAC,UAAU,GAAG,IAAA,uBAAgB,EAAC,uBAAgB,CAAC,GAAG,CAAC,CAAA;QACxD,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAC3B,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,MAAwB,EAAE,EAAE;YAC9D,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAEnD,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YAEzB,MAAM,MAAM,GAAqB;gBAC/B,YAAY,EAAE;oBACZ,gBAAgB,EAAE,2BAAoB,CAAC,WAAW;oBAClD,0BAA0B,EAAE,IAAI;iBACjC;aACF,CAAA;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,EAAE,CAAC;gBACvD,MAAM,CAAC,YAAY,CAAC,SAAS,GAAG;oBAC9B,gBAAgB,EAAE;wBAChB,SAAS,EAAE,IAAI;qBAChB;iBACF,CAAA;YACH,CAAC;YAED,OAAO,MAAM,CAAA;QACf,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE;YACjC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC;gBACrD,0CAA0C;gBAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,yCAAkC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;YACrF,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,EAAE,CAAC;gBACvD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC/D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;gBACxE,CAAC,CAAC,CAAA;YACJ,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,wCAAiC,CAAC,IAAI,EAAE;gBACtE,QAAQ,EAAE;oBACR,EAAE,WAAW,EAAE,kBAAkB,EAAE;oBACnC,EAAE,WAAW,EAAE,6BAA6B,EAAE;iBAC/C;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACxD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC;gBACrD,qCAAqC;gBACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAA;YAChD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,GAAG,CACrC,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAC9D,CAAA;YACnB,CAAC;YAED,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YAE1E,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,MAAM,EAAE,EAAE;YACjD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACrC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;oBACjD,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAA;oBAElC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAA;oBACvD,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CACzC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CACnD,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,MAAgC,EAAE,EAAE;YACxE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAA;IAC1B,CAAC;CACF;AA/FD,wBA+FC"}
package/dist/service.js CHANGED
@@ -4,18 +4,29 @@ exports.Service = void 0;
4
4
  const settings_1 = require("./settings");
5
5
  const document_service_1 = require("./document_service");
6
6
  const diagnostics_1 = require("./diagnostics");
7
+ const parser_service_1 = require("./parser_service");
8
+ const linter_service_1 = require("./linter_service");
7
9
  const config_1 = require("./config");
8
10
  const project_1 = require("./project");
11
+ const formatting_service_1 = require("./formatting_service");
9
12
  class Service {
10
13
  constructor(connection, params) {
11
14
  this.connection = connection;
12
15
  this.settings = new settings_1.Settings(params, this.connection);
13
16
  this.documentService = new document_service_1.DocumentService(this.connection);
14
17
  this.project = new project_1.Project(connection, this.settings.projectPath.replace("file://", ""));
15
- this.diagnostics = new diagnostics_1.Diagnostics(this.connection, this.documentService);
18
+ this.parserService = new parser_service_1.ParserService();
19
+ this.linterService = new linter_service_1.LinterService(this.settings);
20
+ this.formatting = new formatting_service_1.FormattingService(this.connection, this.documentService.documents, this.project, this.settings);
21
+ this.diagnostics = new diagnostics_1.Diagnostics(this.connection, this.documentService, this.parserService, this.linterService);
22
+ // Initialize global settings from initialization options
23
+ if (params.initializationOptions) {
24
+ this.settings.globalSettings = params.initializationOptions;
25
+ }
16
26
  }
17
27
  async init() {
18
28
  await this.project.initialize();
29
+ await this.formatting.initialize();
19
30
  this.config = await config_1.Config.fromPathOrNew(this.project.projectPath);
20
31
  // Only keep settings for open documents
21
32
  this.documentService.onDidClose((change) => {
@@ -23,16 +34,17 @@ class Service {
23
34
  });
24
35
  // The content of a text document has changed. This event is emitted
25
36
  // when the text document first opened or when its content has changed.
26
- this.documentService.onDidChangeContent((change) => {
27
- this.diagnostics.refreshDocument(change.document);
37
+ this.documentService.onDidChangeContent(async (change) => {
38
+ await this.diagnostics.refreshDocument(change.document);
28
39
  });
29
40
  }
30
41
  async refresh() {
31
42
  await this.project.refresh();
32
- this.diagnostics.refreshAllDocuments();
43
+ await this.diagnostics.refreshAllDocuments();
33
44
  }
34
45
  async refreshConfig() {
35
46
  this.config = await config_1.Config.fromPathOrNew(this.project.projectPath);
47
+ await this.formatting.refreshConfig();
36
48
  }
37
49
  }
38
50
  exports.Service = Service;
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":";;;AAEA,yCAAqC;AACrC,yDAAoD;AACpD,+CAA2C;AAC3C,qCAAiC;AACjC,uCAAmC;AAEnC,MAAa,OAAO;IAQlB,YAAY,UAAsB,EAAE,MAAwB;QAC1D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACrD,IAAI,CAAC,eAAe,GAAG,IAAI,kCAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC3D,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;QACxF,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;IAC3E,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAA;QAE/B,IAAI,CAAC,MAAM,GAAG,MAAM,eAAM,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAElE,wCAAwC;QACxC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QAEF,oEAAoE;QACpE,uEAAuE;QACvE,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,EAAE;YACjD,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;QAE5B,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,eAAM,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACpE,CAAC;CACF;AA1CD,0BA0CC"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":";;;AAEA,yCAAmD;AACnD,yDAAoD;AACpD,+CAA2C;AAC3C,qDAAgD;AAChD,qDAAgD;AAChD,qCAAiC;AACjC,uCAAmC;AACnC,6DAAwD;AAExD,MAAa,OAAO;IAWlB,YAAY,UAAsB,EAAE,MAAwB;QAC1D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACrD,IAAI,CAAC,eAAe,GAAG,IAAI,kCAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC3D,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;QACxF,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,EAAE,CAAA;QACxC,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrD,IAAI,CAAC,UAAU,GAAG,IAAI,sCAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrH,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAEjH,yDAAyD;QACzD,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,MAAM,CAAC,qBAAqC,CAAA;QAC7E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAA;QAC/B,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAA;QAElC,IAAI,CAAC,MAAM,GAAG,MAAM,eAAM,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAElE,wCAAwC;QACxC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QAEF,oEAAoE;QACpE,uEAAuE;QACvE,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACvD,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;QAC5B,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,eAAM,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAClE,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAA;IACvC,CAAC;CACF;AAtDD,0BAsDC"}
package/dist/settings.js CHANGED
@@ -1,12 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Settings = void 0;
4
+ const formatter_1 = require("@herb-tools/formatter");
4
5
  class Settings {
5
6
  constructor(params, connection) {
6
7
  // The global settings, used when the `workspace/configuration` request is not supported by the client.
7
8
  // Please note that this is not the case when using this server with the client provided in this example
8
9
  // but could happen with other clients.
9
- this.defaultSettings = {};
10
+ this.defaultSettings = {
11
+ linter: {
12
+ enabled: true
13
+ },
14
+ formatter: {
15
+ enabled: false,
16
+ indentWidth: formatter_1.defaultFormatOptions.indentWidth,
17
+ maxLineLength: formatter_1.defaultFormatOptions.maxLineLength
18
+ }
19
+ };
10
20
  this.globalSettings = this.defaultSettings;
11
21
  this.documentSettings = new Map();
12
22
  this.hasConfigurationCapability = false;
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AAIA,MAAa,QAAQ;IAgBnB,YAAY,MAAwB,EAAE,UAAsB;QAf5D,uGAAuG;QACvG,wGAAwG;QACxG,uCAAuC;QACvC,oBAAe,GAAiB,EAAE,CAAA;QAClC,mBAAc,GAAiB,IAAI,CAAC,eAAe,CAAA;QACnD,qBAAgB,GAAwC,IAAI,GAAG,EAAE,CAAA;QAEjE,+BAA0B,GAAG,KAAK,CAAA;QAClC,iCAA4B,GAAG,KAAK,CAAA;QACpC,8CAAyC,GAAG,KAAK,CAAA;QAO/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,iEAAiE;QACjE,8CAA8C;QAC9C,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QAEhH,IAAI,CAAC,4BAA4B,GAAG,CAAC,CAAC,CACpC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,gBAAgB,CAC9E,CAAA;QAED,IAAI,CAAC,yCAAyC,GAAG,CAAC,CAAC,CACjD,IAAI,CAAC,YAAY,CAAC,YAAY;YAC9B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,kBAAkB;YACjD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,kBAAkB,CAAC,kBAAkB,CACrE,CAAA;IACH,CAAC;IAED,IAAI,WAAW;;QACb,OAAO,CAAA,MAAA,MAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,0CAAE,EAAE,CAAC,CAAC,CAAC,0CAAE,GAAG,KAAI,EAAE,CAAA;IACvD,CAAC;IAED,mBAAmB,CAAC,QAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEhD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBAClD,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,oBAAoB;aAC9B,CAAC,CAAA;YAEF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC7C,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AA1DD,4BA0DC"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AACA,qDAA4D;AAgB5D,MAAa,QAAQ;IAyBnB,YAAY,MAAwB,EAAE,UAAsB;QAxB5D,uGAAuG;QACvG,wGAAwG;QACxG,uCAAuC;QACvC,oBAAe,GAAiB;YAC9B,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI;aACd;YACD,SAAS,EAAE;gBACT,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,gCAAoB,CAAC,WAAW;gBAC7C,aAAa,EAAE,gCAAoB,CAAC,aAAa;aAClD;SACF,CAAA;QACD,mBAAc,GAAiB,IAAI,CAAC,eAAe,CAAA;QACnD,qBAAgB,GAAwC,IAAI,GAAG,EAAE,CAAA;QAEjE,+BAA0B,GAAG,KAAK,CAAA;QAClC,iCAA4B,GAAG,KAAK,CAAA;QACpC,8CAAyC,GAAG,KAAK,CAAA;QAO/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,iEAAiE;QACjE,8CAA8C;QAC9C,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QAEhH,IAAI,CAAC,4BAA4B,GAAG,CAAC,CAAC,CACpC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,gBAAgB,CAC9E,CAAA;QAED,IAAI,CAAC,yCAAyC,GAAG,CAAC,CAAC,CACjD,IAAI,CAAC,YAAY,CAAC,YAAY;YAC9B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,kBAAkB;YACjD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,kBAAkB,CAAC,kBAAkB,CACrE,CAAA;IACH,CAAC;IAED,IAAI,WAAW;;QACb,OAAO,CAAA,MAAA,MAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,0CAAE,EAAE,CAAC,CAAC,CAAC,0CAAE,GAAG,KAAI,EAAE,CAAA;IACvD,CAAC;IAED,mBAAmB,CAAC,QAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEhD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBAClD,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,oBAAoB;aAC9B,CAAC,CAAA;YAEF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC7C,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAnED,4BAmEC"}
@@ -0,0 +1,4 @@
1
+ export declare class CLI {
2
+ private usage;
3
+ run(): void;
4
+ }
@@ -1,4 +1,12 @@
1
- export type HerbConfigOptions = {};
1
+ export type HerbConfigOptions = {
2
+ formatter?: {
3
+ enabled?: boolean;
4
+ include?: string[];
5
+ exclude?: string[];
6
+ indentWidth?: number;
7
+ maxLineLength?: number;
8
+ };
9
+ };
2
10
  export type HerbLSPConfig = {
3
11
  version: string;
4
12
  createdAt: string;
@@ -1,15 +1,17 @@
1
- import { Connection, Diagnostic, DiagnosticSeverity, Range } from "vscode-languageserver/node";
2
1
  import { TextDocument } from "vscode-languageserver-textdocument";
2
+ import { Connection } from "vscode-languageserver/node";
3
+ import { ParserService } from "./parser_service";
4
+ import { LinterService } from "./linter_service";
3
5
  import { DocumentService } from "./document_service";
4
6
  export declare class Diagnostics {
5
7
  private readonly connection;
6
8
  private readonly documentService;
7
- private readonly diagnosticsSource;
9
+ private readonly parserService;
10
+ private readonly linterService;
8
11
  private diagnostics;
9
- constructor(connection: Connection, documentService: DocumentService);
10
- validate(textDocument: TextDocument): void;
11
- refreshDocument(document: TextDocument): void;
12
- refreshAllDocuments(): void;
13
- pushDiagnostic(message: string, code: string, range: Range, textDocument: TextDocument, data?: {}, severity?: DiagnosticSeverity): Diagnostic;
12
+ constructor(connection: Connection, documentService: DocumentService, parserService: ParserService, linterService: LinterService);
13
+ validate(textDocument: TextDocument): Promise<void>;
14
+ refreshDocument(document: TextDocument): Promise<void>;
15
+ refreshAllDocuments(): Promise<void>;
14
16
  private sendDiagnosticsFor;
15
17
  }
@@ -0,0 +1,19 @@
1
+ import { Connection, TextDocuments, DocumentFormattingParams, TextEdit } from "vscode-languageserver/node";
2
+ import { TextDocument } from "vscode-languageserver-textdocument";
3
+ import { Project } from "./project";
4
+ import { Settings } from "./settings";
5
+ export declare class FormattingService {
6
+ private connection;
7
+ private documents;
8
+ private project;
9
+ private settings;
10
+ private config?;
11
+ constructor(connection: Connection, documents: TextDocuments<TextDocument>, project: Project, settings: Settings);
12
+ initialize(): Promise<void>;
13
+ refreshConfig(): Promise<void>;
14
+ private shouldFormatFile;
15
+ private getFormatterOptions;
16
+ private performFormatting;
17
+ formatDocument(params: DocumentFormattingParams): Promise<TextEdit[]>;
18
+ formatDocumentIgnoreConfig(params: DocumentFormattingParams): Promise<TextEdit[]>;
19
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,10 @@
1
+ export * from "./server";
2
+ export * from "./service";
3
+ export * from "./config";
4
+ export * from "./diagnostics";
5
+ export * from "./document_service";
6
+ export * from "./formatting_service";
7
+ export * from "./project";
8
+ export * from "./settings";
9
+ export * from "./utils";
10
+ export * from "./cli";
@@ -0,0 +1,14 @@
1
+ import { Diagnostic } from "vscode-languageserver/node";
2
+ import { TextDocument } from "vscode-languageserver-textdocument";
3
+ import { Settings } from "./settings";
4
+ import type { DocumentNode } from "@herb-tools/node-wasm";
5
+ export interface LintServiceResult {
6
+ diagnostics: Diagnostic[];
7
+ }
8
+ export declare class LinterService {
9
+ private readonly settings;
10
+ private readonly source;
11
+ private linter;
12
+ constructor(settings: Settings);
13
+ lintDocument(document: DocumentNode, textDocument: TextDocument): Promise<LintServiceResult>;
14
+ }
@@ -0,0 +1,10 @@
1
+ import { Diagnostic } from "vscode-languageserver/node";
2
+ import { TextDocument } from "vscode-languageserver-textdocument";
3
+ import type { DocumentNode } from "@herb-tools/node-wasm";
4
+ export interface ParseServiceResult {
5
+ document: DocumentNode;
6
+ diagnostics: Diagnostic[];
7
+ }
8
+ export declare class ParserService {
9
+ parseDocument(textDocument: TextDocument): ParseServiceResult;
10
+ }
@@ -1,7 +1,9 @@
1
+ import { HerbBackend } from "@herb-tools/node-wasm";
1
2
  import { Connection } from "vscode-languageserver/node";
2
3
  export declare class Project {
3
4
  connection: Connection;
4
5
  projectPath: string;
6
+ herbBackend: HerbBackend;
5
7
  constructor(connection: Connection, projectPath: string);
6
8
  initialize(): Promise<void>;
7
9
  refresh(): Promise<void>;
@@ -1 +1,7 @@
1
- export {};
1
+ export declare class Server {
2
+ private service;
3
+ private connection;
4
+ constructor();
5
+ private setupEventHandlers;
6
+ listen(): void;
7
+ }
@@ -2,15 +2,21 @@ import { Connection, InitializeParams } from "vscode-languageserver/node";
2
2
  import { Settings } from "./settings";
3
3
  import { DocumentService } from "./document_service";
4
4
  import { Diagnostics } from "./diagnostics";
5
+ import { ParserService } from "./parser_service";
6
+ import { LinterService } from "./linter_service";
5
7
  import { Config } from "./config";
6
8
  import { Project } from "./project";
9
+ import { FormattingService } from "./formatting_service";
7
10
  export declare class Service {
8
11
  connection: Connection;
9
12
  settings: Settings;
10
13
  diagnostics: Diagnostics;
11
14
  documentService: DocumentService;
15
+ parserService: ParserService;
16
+ linterService: LinterService;
12
17
  project: Project;
13
18
  config?: Config;
19
+ formatting: FormattingService;
14
20
  constructor(connection: Connection, params: InitializeParams);
15
21
  init(): Promise<void>;
16
22
  refresh(): Promise<void>;
@@ -1,5 +1,16 @@
1
1
  import { ClientCapabilities, Connection, InitializeParams } from "vscode-languageserver/node";
2
2
  export interface HerbSettings {
3
+ trace?: {
4
+ server?: string;
5
+ };
6
+ linter?: {
7
+ enabled?: boolean;
8
+ };
9
+ formatter?: {
10
+ enabled?: boolean;
11
+ indentWidth?: number;
12
+ maxLineLength?: number;
13
+ };
3
14
  }
4
15
  export declare class Settings {
5
16
  defaultSettings: HerbSettings;