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