ace-linters 0.0.3 → 0.1.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/README.md +83 -12
- package/build/ace-linters.js +33007 -0
- package/build/css-service.js +73636 -0
- package/build/html-service.js +51337 -0
- package/build/json-service.js +41679 -0
- package/build/lua-service.js +3017 -0
- package/build/service-manager.js +1994 -0
- package/build/typescript-service.js +192262 -0
- package/components/description-tooltip.ts +111 -63
- package/css/linters.css +2 -1
- package/index.ts +2 -7
- package/language-provider.ts +186 -119
- package/message-controller-ws.ts +290 -0
- package/message-controller.ts +16 -23
- package/message-types.ts +11 -11
- package/package.json +11 -6
- package/services/base-service.ts +7 -6
- package/services/css/css-service.ts +2 -2
- package/services/html/html-service.ts +2 -2
- package/services/json/json-service.ts +5 -6
- package/services/lua/lua-service.ts +38 -0
- package/services/service-manager.ts +91 -54
- package/services/typescript/typescript-service.ts +2 -2
- package/type-converters/{vscode-converters.ts → lsp-converters.ts} +10 -4
- package/type-converters/typescript-converters.ts +3 -3
- package/{type-converters → types}/converters.d.ts +0 -0
- package/types/index.d.ts +9 -0
- package/{services → types}/language-service.d.ts +5 -6
- package/types/message-controller-interface.d.ts +28 -0
- package/webpack.config.js +11 -13
- package/build/bundle.ace-linters.js +0 -2
- package/build/bundle.ace-linters.js.LICENSE.txt +0 -40
- package/build/bundle.web.worker.worker.js.LICENSE.txt +0 -38
- package/index.d.ts +0 -9
- package/web.worker.ts +0 -54
- package/worker-loader.d.ts +0 -7
package/README.md
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
# Ace Linters
|
|
1
|
+
# Ace Linters (Ace Language Client)
|
|
2
2
|
|
|
3
3
|
Ace linters is a library that brings language-aware features to the Ace editor. It includes a number of language services, each of which provides support for a specific language, such as JSON, HTML, CSS, and Typescript.
|
|
4
4
|
|
|
5
|
+
Ace linters works in two modes: **WebSockets** and **WebWorkers**.
|
|
6
|
+
|
|
5
7
|
## Features
|
|
6
8
|
|
|
7
9
|
With Ace linters, you can easily add the following language-aware features to your Ace editor:
|
|
@@ -13,12 +15,14 @@ With Ace linters, you can easily add the following language-aware features to yo
|
|
|
13
15
|
|
|
14
16
|
## Supported languages
|
|
15
17
|
|
|
16
|
-
Ace linters supports the following languages:
|
|
18
|
+
Ace linters supports the following languages by default with webworkers approach:
|
|
17
19
|
- JSON, JSON5 (with JsonService)
|
|
18
20
|
- HTML (with HtmlService)
|
|
19
21
|
- CSS, SCSS, LESS (with CssService)
|
|
20
22
|
- Typescript, Javascript, JSX, TSX (with TypescriptService)
|
|
23
|
+
- Lua (with LuaService)
|
|
21
24
|
|
|
25
|
+
For WebSockets you could connect any of your Language Server folowing LSP
|
|
22
26
|
## Installation
|
|
23
27
|
|
|
24
28
|
To install Ace linters, you can use the following command:
|
|
@@ -27,20 +31,29 @@ To install Ace linters, you can use the following command:
|
|
|
27
31
|
npm install ace-linters
|
|
28
32
|
```
|
|
29
33
|
|
|
30
|
-
## Usage
|
|
34
|
+
## Usage with WebWorker
|
|
35
|
+
|
|
36
|
+
To use Ace linters with WebWorker, you will first need to include it in your project and create an instance of the Ace
|
|
37
|
+
editor
|
|
38
|
+
and
|
|
39
|
+
an instance of LanguageProvider. Then, LanguageProvider will use the appropriate language service based on the mode being used:
|
|
31
40
|
|
|
32
|
-
|
|
41
|
+
*client.js*:
|
|
33
42
|
```javascript
|
|
34
43
|
import * as ace from "ace-code";
|
|
35
44
|
import {Mode as TypescriptMode} from "ace-code/src/mode/typescript";
|
|
36
|
-
import {registerStyles, LanguageProvider,
|
|
45
|
+
import {registerStyles, LanguageProvider, MessageController} from "ace-linters";
|
|
37
46
|
import { ScriptTarget, JsxEmit } from "ace-linters/type-converters/typescript-converters";
|
|
38
47
|
|
|
39
|
-
//
|
|
48
|
+
// Register custom styles for the hover tooltip
|
|
40
49
|
registerStyles();
|
|
41
|
-
|
|
42
|
-
//
|
|
43
|
-
|
|
50
|
+
|
|
51
|
+
// Create a web worker and a message controller
|
|
52
|
+
let worker = new Worker(new URL('./webworker.js', import.meta.url));
|
|
53
|
+
let messageController = new MessageController(worker);
|
|
54
|
+
|
|
55
|
+
// Set global options for the Typescript service
|
|
56
|
+
messageController.setGlobalOptions("typescript", {
|
|
44
57
|
compilerOptions: {
|
|
45
58
|
allowJs: true,
|
|
46
59
|
target: ScriptTarget.ESNext,
|
|
@@ -48,13 +61,71 @@ setLanguageGlobalOptions("typescript", {
|
|
|
48
61
|
}
|
|
49
62
|
});
|
|
50
63
|
|
|
64
|
+
// Create an Ace editor
|
|
51
65
|
let editor = ace.edit("container");
|
|
66
|
+
|
|
67
|
+
// Set the mode of the editor to Typescript
|
|
52
68
|
editor.session.setMode(new TypescriptMode());
|
|
53
|
-
|
|
54
|
-
|
|
69
|
+
|
|
70
|
+
// Create a language provider
|
|
71
|
+
let languageProvider = new LanguageProvider(messageController);
|
|
72
|
+
|
|
73
|
+
// Register the editor with the language provider
|
|
74
|
+
languageProvider.registerEditor(editor);
|
|
75
|
+
|
|
55
76
|
```
|
|
77
|
+
In WebWorkers mode, you need to register
|
|
78
|
+
services on the webworker side. Like this:
|
|
79
|
+
|
|
80
|
+
*webworker.js*
|
|
81
|
+
```javascript
|
|
82
|
+
import {ServiceManager} from "ace-linters/services/service-manager";
|
|
83
|
+
let manager = new ServiceManager(self);
|
|
84
|
+
manager.registerService("typescript", {
|
|
85
|
+
module: () => import("ace-linters/services/typescript/typescript-service"),
|
|
86
|
+
className: "TypescriptService",
|
|
87
|
+
modes: "typescript|javascript|tsx|jsx",
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
[Example client](https://github.com/mkslanc/ace-linters/blob/main/packages/demo/webworker-lsp/demo.ts).
|
|
92
|
+
|
|
93
|
+
[Example web worker](https://github.com/mkslanc/ace-linters/blob/main/packages/demo/webworker-lsp/webworker.ts)
|
|
94
|
+
|
|
95
|
+
## Usage with WebSocket
|
|
96
|
+
In WebSockets mode, you need to start a language server on any port and connect to it.
|
|
97
|
+
|
|
98
|
+
Here's an example client:
|
|
99
|
+
```javascript
|
|
100
|
+
import * as ace from "ace-code";
|
|
101
|
+
import {Mode as JSONMode} from "ace-code/src/mode/json"; //any mode you want
|
|
102
|
+
import {registerStyles, LanguageProvider, MessageControllerWS} from "ace-linters";
|
|
103
|
+
import { ScriptTarget, JsxEmit } from "ace-linters/type-converters/typescript-converters";
|
|
104
|
+
|
|
105
|
+
// Register custom styles for the hover tooltip
|
|
106
|
+
registerStyles();
|
|
107
|
+
|
|
108
|
+
// Create a web socket and a message controller
|
|
109
|
+
const webSocket = new WebSocket("ws://localhost:3000/exampleServer"); // adress of your websocket server
|
|
110
|
+
|
|
111
|
+
//Message controller for web sockets
|
|
112
|
+
let messageController = new MessageControllerWS(webSocket);
|
|
113
|
+
|
|
114
|
+
// Create an Ace editor
|
|
115
|
+
let editor = ace.edit("container");
|
|
116
|
+
|
|
117
|
+
// Set the mode of the editor to JSON
|
|
118
|
+
editor.session.setMode(new JSONMode());
|
|
119
|
+
|
|
120
|
+
// Create a language provider
|
|
121
|
+
let languageProvider = new LanguageProvider(messageController);
|
|
122
|
+
|
|
123
|
+
// Register the editor with the language provider
|
|
124
|
+
languageProvider.registerEditor(editor);
|
|
125
|
+
```
|
|
56
126
|
|
|
57
|
-
|
|
127
|
+
[Example client](https://github.com/mkslanc/ace-linters/blob/main/packages/demo/websockets-lsp/client.ts)
|
|
58
128
|
|
|
129
|
+
[Example server](https://github.com/mkslanc/ace-linters/tree/main/packages/demo/websockets-lsp/server)
|
|
59
130
|
## License
|
|
60
131
|
Ace linters is released under the [MIT License](https://opensource.org/licenses/MIT).
|