@herb-tools/language-server 0.4.0 → 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.
- package/README.md +42 -10
- package/dist/formatting_service.js +4 -6
- package/dist/formatting_service.js.map +1 -1
- package/dist/herb-language-server.js +308 -144
- package/dist/herb-language-server.js.map +1 -1
- package/dist/index.cjs +308 -144
- package/dist/index.cjs.map +1 -1
- package/dist/linter_service.js +1 -1
- package/dist/linter_service.js.map +1 -1
- package/dist/settings.js +3 -0
- package/dist/settings.js.map +1 -1
- package/package.json +10 -6
- package/src/formatting_service.ts +5 -6
- package/src/linter_service.ts +1 -1
- package/src/settings.ts +3 -0
package/README.md
CHANGED
|
@@ -26,7 +26,43 @@ Read more in the [documentation](https://zed.dev/docs/languages/ruby).
|
|
|
26
26
|
|
|
27
27
|
#### Neovim (using `nvim-lspconfig`)
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
After installing the Herb Language Server (see below), add `herb_ls` to your Neovim config (requires nvim 0.11+):
|
|
30
|
+
|
|
31
|
+
```lua
|
|
32
|
+
require('lspconfig')
|
|
33
|
+
vim.lsp.enable('herb_ls')
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
#### Sublime Text (using Sublime LSP)
|
|
37
|
+
|
|
38
|
+
After installing the Herb Language Server (see below) and [Sublime LSP](http://lsp.sublimetext.io), update the preferences for the `LSP` package:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
// LSP.sublime-settings
|
|
42
|
+
{
|
|
43
|
+
"clients": {
|
|
44
|
+
"herb": {
|
|
45
|
+
"enabled": true,
|
|
46
|
+
"command": [
|
|
47
|
+
"herb-language-server",
|
|
48
|
+
"--stdio"
|
|
49
|
+
],
|
|
50
|
+
"selector": "text.html.ruby | text.html.rails",
|
|
51
|
+
"settings": {
|
|
52
|
+
"languageServerHerb.linter": {
|
|
53
|
+
"enabled": true
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"initializationOptions": {
|
|
57
|
+
"enabledFeatures": {
|
|
58
|
+
"diagnostics": true,
|
|
59
|
+
},
|
|
60
|
+
"experimentalFeaturesEnabled": true
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
}
|
|
65
|
+
```
|
|
30
66
|
|
|
31
67
|
#### Manual Installation
|
|
32
68
|
|
|
@@ -74,9 +110,9 @@ npx @herb-tools/language-server --stdio
|
|
|
74
110
|
|
|
75
111
|
The language server can be configured using a `.herb-lsp/config.json` file in your project root. This file is automatically created when the language server starts if it doesn't exist.
|
|
76
112
|
|
|
77
|
-
###
|
|
113
|
+
### Formatter Configuration
|
|
78
114
|
|
|
79
|
-
You can configure formatting behavior by adding a `
|
|
115
|
+
You can configure formatting behavior by adding a `formatter` section to your config:
|
|
80
116
|
|
|
81
117
|
```json
|
|
82
118
|
{
|
|
@@ -84,10 +120,8 @@ You can configure formatting behavior by adding a `formatting` section to your c
|
|
|
84
120
|
"createdAt": "2025-06-29T00:00:00.000Z",
|
|
85
121
|
"updatedAt": "2025-06-29T00:00:00.000Z",
|
|
86
122
|
"options": {
|
|
87
|
-
"
|
|
123
|
+
"formatter": {
|
|
88
124
|
"enabled": true,
|
|
89
|
-
"include": ["**/*.html.erb"],
|
|
90
|
-
"exclude": ["**/node_modules/**", "**/dist/**", "**/*.min.html.erb"],
|
|
91
125
|
"indentWidth": 2,
|
|
92
126
|
"maxLineLength": 80
|
|
93
127
|
}
|
|
@@ -95,12 +129,10 @@ You can configure formatting behavior by adding a `formatting` section to your c
|
|
|
95
129
|
}
|
|
96
130
|
```
|
|
97
131
|
|
|
98
|
-
#### `
|
|
132
|
+
#### `formatter` Options
|
|
99
133
|
|
|
100
134
|
- `enabled` (`boolean`): Enable or disable formatting for this project. Defaults to `false`.
|
|
101
|
-
- `include` (`string[]`): Glob patterns for files to include in formatting. If specified, only matching files will be formatted.
|
|
102
|
-
- `exclude` (`string[]`): Glob patterns for files to exclude from formatting. Takes precedence over `include` patterns.
|
|
103
135
|
- `indentWidth` (`number`): Number of spaces for each indentation level. Defaults to `2`.
|
|
104
136
|
- `maxLineLength` (`number`): Maximum line length before wrapping. Defaults to `80`.
|
|
105
137
|
|
|
106
|
-
**Note**: VS Code users can also control formatting globally through the `languageServerHerb.
|
|
138
|
+
**Note**: VS Code users can also control formatting globally through the `languageServerHerb.formatter.enabled` setting in VS Code preferences. Formatting is currently in **Beta** and disabled by default.
|
|
@@ -70,11 +70,8 @@ class FormattingService {
|
|
|
70
70
|
}
|
|
71
71
|
async getFormatterOptions(uri) {
|
|
72
72
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
73
|
-
// Get VS Code settings
|
|
74
73
|
const settings = await this.settings.getDocumentSettings(uri);
|
|
75
|
-
// Get project config options
|
|
76
74
|
const projectFormatter = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.options.formatter) || {};
|
|
77
|
-
// Merge options with precedence: project config > VS Code settings > defaults
|
|
78
75
|
return {
|
|
79
76
|
indentWidth: (_d = (_b = projectFormatter.indentWidth) !== null && _b !== void 0 ? _b : (_c = settings.formatter) === null || _c === void 0 ? void 0 : _c.indentWidth) !== null && _d !== void 0 ? _d : formatter_1.defaultFormatOptions.indentWidth,
|
|
80
77
|
maxLineLength: (_g = (_e = projectFormatter.maxLineLength) !== null && _e !== void 0 ? _e : (_f = settings.formatter) === null || _f === void 0 ? void 0 : _f.maxLineLength) !== null && _g !== void 0 ? _g : formatter_1.defaultFormatOptions.maxLineLength
|
|
@@ -89,7 +86,10 @@ class FormattingService {
|
|
|
89
86
|
const options = await this.getFormatterOptions(params.textDocument.uri);
|
|
90
87
|
const formatter = new formatter_1.Formatter(this.project.herbBackend, options);
|
|
91
88
|
const text = document.getText();
|
|
92
|
-
|
|
89
|
+
let newText = formatter.format(text);
|
|
90
|
+
if (!newText.endsWith('\n')) {
|
|
91
|
+
newText = newText + '\n';
|
|
92
|
+
}
|
|
93
93
|
if (newText === text) {
|
|
94
94
|
return [];
|
|
95
95
|
}
|
|
@@ -106,12 +106,10 @@ class FormattingService {
|
|
|
106
106
|
}
|
|
107
107
|
async formatDocument(params) {
|
|
108
108
|
var _a;
|
|
109
|
-
// Check VS Code settings first
|
|
110
109
|
const settings = await this.settings.getDocumentSettings(params.textDocument.uri);
|
|
111
110
|
if (((_a = settings.formatter) === null || _a === void 0 ? void 0 : _a.enabled) === false) {
|
|
112
111
|
return [];
|
|
113
112
|
}
|
|
114
|
-
// Check project config and file patterns
|
|
115
113
|
const filePath = params.textDocument.uri.replace(/^file:\/\//, '');
|
|
116
114
|
if (!(await this.shouldFormatFile(filePath))) {
|
|
117
115
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatting_service.js","sourceRoot":"","sources":["../src/formatting_service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"formatting_service.js","sourceRoot":"","sources":["../src/formatting_service.ts"],"names":[],"mappings":"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"}
|