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.
Files changed (36) hide show
  1. package/README.md +83 -12
  2. package/build/ace-linters.js +33007 -0
  3. package/build/css-service.js +73636 -0
  4. package/build/html-service.js +51337 -0
  5. package/build/json-service.js +41679 -0
  6. package/build/lua-service.js +3017 -0
  7. package/build/service-manager.js +1994 -0
  8. package/build/typescript-service.js +192262 -0
  9. package/components/description-tooltip.ts +111 -63
  10. package/css/linters.css +2 -1
  11. package/index.ts +2 -7
  12. package/language-provider.ts +186 -119
  13. package/message-controller-ws.ts +290 -0
  14. package/message-controller.ts +16 -23
  15. package/message-types.ts +11 -11
  16. package/package.json +11 -6
  17. package/services/base-service.ts +7 -6
  18. package/services/css/css-service.ts +2 -2
  19. package/services/html/html-service.ts +2 -2
  20. package/services/json/json-service.ts +5 -6
  21. package/services/lua/lua-service.ts +38 -0
  22. package/services/service-manager.ts +91 -54
  23. package/services/typescript/typescript-service.ts +2 -2
  24. package/type-converters/{vscode-converters.ts → lsp-converters.ts} +10 -4
  25. package/type-converters/typescript-converters.ts +3 -3
  26. package/{type-converters → types}/converters.d.ts +0 -0
  27. package/types/index.d.ts +9 -0
  28. package/{services → types}/language-service.d.ts +5 -6
  29. package/types/message-controller-interface.d.ts +28 -0
  30. package/webpack.config.js +11 -13
  31. package/build/bundle.ace-linters.js +0 -2
  32. package/build/bundle.ace-linters.js.LICENSE.txt +0 -40
  33. package/build/bundle.web.worker.worker.js.LICENSE.txt +0 -38
  34. package/index.d.ts +0 -9
  35. package/web.worker.ts +0 -54
  36. 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
- To use Ace linters, you will first need to include it in your project and create an instance of the Ace editor and an instance of LanguageProvider. Then, LanguageProvider will use the appropriate language service based on the mode being used:
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, setLanguageGlobalOptions, AceLinters} from "ace-linters";
45
+ import {registerStyles, LanguageProvider, MessageController} from "ace-linters";
37
46
  import { ScriptTarget, JsxEmit } from "ace-linters/type-converters/typescript-converters";
38
47
 
39
- //provides better styles for hover tooltip
48
+ // Register custom styles for the hover tooltip
40
49
  registerStyles();
41
- // set global options for Typescript Service, if haven't called,
42
- // would use default instead
43
- setLanguageGlobalOptions("typescript", {
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
- // Create Language Provider (you could pass options as second parameter)
54
- let provider = new LanguageProvider(editor, {});
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
- Once you have created a language provider, you can use the Ace editor as you normally would, and the language-aware features provided by the service will be available.
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).