@kerebron/extension-lsp 0.7.8 → 0.8.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 (46) hide show
  1. package/esm/ExtensionLsp.d.ts +2 -6
  2. package/esm/ExtensionLsp.d.ts.map +1 -1
  3. package/esm/ExtensionLsp.js +44 -36
  4. package/esm/ExtensionLsp.js.map +1 -1
  5. package/esm/LSPClient.d.ts +5 -4
  6. package/esm/LSPClient.d.ts.map +1 -1
  7. package/esm/LSPClient.js +14 -5
  8. package/esm/LSPClient.js.map +1 -1
  9. package/esm/LSPPlugin.d.ts +38 -0
  10. package/esm/LSPPlugin.d.ts.map +1 -0
  11. package/esm/LSPPlugin.js +190 -0
  12. package/esm/LSPPlugin.js.map +1 -0
  13. package/esm/{LspWebSocketTransport.d.ts → LSPWebSocketTransport.d.ts} +2 -2
  14. package/esm/{LspWebSocketTransport.d.ts.map → LSPWebSocketTransport.d.ts.map} +1 -1
  15. package/esm/{LspWebSocketTransport.js → LSPWebSocketTransport.js} +2 -2
  16. package/esm/{LspWebSocketTransport.js.map → LSPWebSocketTransport.js.map} +1 -1
  17. package/esm/LSPWorkspace.d.ts +39 -0
  18. package/esm/LSPWorkspace.d.ts.map +1 -0
  19. package/esm/LSPWorkspace.js +118 -0
  20. package/esm/LSPWorkspace.js.map +1 -0
  21. package/esm/createLspAutocomplete.d.ts +3 -9
  22. package/esm/createLspAutocomplete.d.ts.map +1 -1
  23. package/esm/createLspAutocomplete.js +4 -5
  24. package/esm/createLspAutocomplete.js.map +1 -1
  25. package/esm/mod.d.ts +1 -1
  26. package/esm/mod.d.ts.map +1 -1
  27. package/esm/mod.js +1 -1
  28. package/esm/mod.js.map +1 -1
  29. package/esm/workspace.d.ts +6 -35
  30. package/esm/workspace.d.ts.map +1 -1
  31. package/esm/workspace.js +3 -98
  32. package/esm/workspace.js.map +1 -1
  33. package/package.json +6 -6
  34. package/src/ExtensionLsp.ts +47 -47
  35. package/src/LSPClient.ts +21 -13
  36. package/src/LSPPlugin.ts +323 -0
  37. package/src/{LspWebSocketTransport.ts → LSPWebSocketTransport.ts} +1 -1
  38. package/src/LSPWorkspace.ts +172 -0
  39. package/src/createLspAutocomplete.ts +10 -7
  40. package/src/mod.ts +1 -1
  41. package/src/workspace.ts +8 -147
  42. package/esm/DiagnosticPlugin.d.ts +0 -32
  43. package/esm/DiagnosticPlugin.d.ts.map +0 -1
  44. package/esm/DiagnosticPlugin.js +0 -117
  45. package/esm/DiagnosticPlugin.js.map +0 -1
  46. package/src/DiagnosticPlugin.ts +0 -196
@@ -0,0 +1,39 @@
1
+ import type * as lsp from 'vscode-languageserver-protocol';
2
+ import type { EditorUi } from '@kerebron/editor';
3
+ import { Workspace, WorkspaceFile } from './workspace.js';
4
+ import { PositionMapper } from '@kerebron/extension-markdown/PositionMapper';
5
+ import { LSPClient } from './LSPClient.js';
6
+ export interface LSPSource {
7
+ ui: EditorUi;
8
+ getMappedContent(): Promise<{
9
+ content: string;
10
+ mapper: PositionMapper;
11
+ }>;
12
+ }
13
+ declare class LSPWorkspaceFile implements WorkspaceFile {
14
+ readonly uri: string;
15
+ readonly languageId: string;
16
+ version: number;
17
+ content: string;
18
+ mapper: PositionMapper;
19
+ source: LSPSource;
20
+ syncedContent: string;
21
+ diagnostics: Array<lsp.Diagnostic>;
22
+ constructor(uri: string, languageId: string, version: number, content: string, mapper: PositionMapper, source: LSPSource);
23
+ getUi(): EditorUi;
24
+ }
25
+ export declare class LSPWorkspace extends Workspace {
26
+ private client;
27
+ files: LSPWorkspaceFile[];
28
+ private fileVersions;
29
+ constructor(client: LSPClient);
30
+ nextFileVersion(uri: string): number;
31
+ connected(): Promise<void>;
32
+ disconnected(): void;
33
+ syncFiles(): void;
34
+ changedFile(uri: string): Promise<void>;
35
+ openFile(uri: string, languageId: string, source: LSPSource): Promise<void>;
36
+ closeFile(uri: string): void;
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=LSPWorkspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LSPWorkspace.d.ts","sourceRoot":"","sources":["../src/LSPWorkspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,gCAAgC,CAAC;AAG3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAE7E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,QAAQ,CAAC;IACb,gBAAgB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED,cAAM,gBAAiB,YAAW,aAAa;IAK3C,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,SAAS;IATnB,aAAa,EAAE,MAAM,CAAM;IAC3B,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAM;gBAGpC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,SAAS;IAI1B,KAAK;CAGN;AAED,qBAAa,YAAa,SAAQ,SAAS;IAI7B,OAAO,CAAC,MAAM;IAH1B,KAAK,EAAE,gBAAgB,EAAE,CAAM;IAC/B,OAAO,CAAC,YAAY,CAAkD;gBAElD,MAAM,EAAE,SAAS;IAIrC,eAAe,CAAC,GAAG,EAAE,MAAM;IAIZ,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC,YAAY,IAAI,IAAI;IAO7B,SAAS;IAUH,WAAW,CAAC,GAAG,EAAE,MAAM;IAqDvB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IAsBjE,SAAS,CAAC,GAAG,EAAE,MAAM;CAOtB"}
@@ -0,0 +1,118 @@
1
+ import { TextDocumentSyncKind } from 'vscode-languageserver-protocol';
2
+ import { Workspace } from './workspace.js';
3
+ import { computeIncrementalChanges } from './computeIncrementalChanges.js';
4
+ class LSPWorkspaceFile {
5
+ uri;
6
+ languageId;
7
+ version;
8
+ content;
9
+ mapper;
10
+ source;
11
+ syncedContent = '';
12
+ diagnostics = [];
13
+ constructor(uri, languageId, version, content, mapper, source) {
14
+ this.uri = uri;
15
+ this.languageId = languageId;
16
+ this.version = version;
17
+ this.content = content;
18
+ this.mapper = mapper;
19
+ this.source = source;
20
+ }
21
+ getUi() {
22
+ return this.source.ui;
23
+ }
24
+ }
25
+ export class LSPWorkspace extends Workspace {
26
+ client;
27
+ files = [];
28
+ fileVersions = Object.create(null);
29
+ constructor(client) {
30
+ super();
31
+ this.client = client;
32
+ }
33
+ nextFileVersion(uri) {
34
+ return this.fileVersions[uri] = (this.fileVersions[uri] ?? -1) + 1;
35
+ }
36
+ async connected() {
37
+ super.connected();
38
+ for await (const file of this.files) {
39
+ const result = await this.client.didOpen(file);
40
+ }
41
+ }
42
+ disconnected() {
43
+ for (const file of this.files) {
44
+ this.client.workspace.closeFile(file.uri);
45
+ }
46
+ super.disconnected();
47
+ }
48
+ syncFiles() {
49
+ if (!this.client.supportSync) {
50
+ return;
51
+ }
52
+ for (const file of this.files) {
53
+ this.changedFile(file.uri);
54
+ }
55
+ }
56
+ async changedFile(uri) {
57
+ const file = this.files.find((f) => f.uri == uri) || null;
58
+ if (file) {
59
+ const { content, mapper } = await file.source.getMappedContent();
60
+ if (!this.isConnected) {
61
+ file.content = content;
62
+ file.mapper = mapper;
63
+ return;
64
+ }
65
+ if (await this.client.notification('textDocument/didChange', {
66
+ textDocument: { uri: file.uri, version: file.version },
67
+ contentChanges: contentChangesFor(file, content, mapper, this.client.supportSync == TextDocumentSyncKind.Incremental),
68
+ })) {
69
+ file.syncedContent = file.content;
70
+ file.content = content;
71
+ file.mapper = mapper;
72
+ file.version = this.nextFileVersion(file.uri);
73
+ file.diagnostics = [];
74
+ this.dispatchEvent(new CustomEvent('fileChanged', {
75
+ detail: {
76
+ uri: file.uri,
77
+ file,
78
+ },
79
+ }));
80
+ }
81
+ await this.client.notification('textDocument/diagnostic', {
82
+ textDocument: {
83
+ uri: file.uri,
84
+ },
85
+ });
86
+ }
87
+ }
88
+ async openFile(uri, languageId, source) {
89
+ // if (uri) {}
90
+ if (this.getFile(uri)) {
91
+ this.closeFile(uri);
92
+ }
93
+ const mappedContent = await source.getMappedContent();
94
+ const { content, mapper } = mappedContent;
95
+ const file = new LSPWorkspaceFile(uri, languageId, this.nextFileVersion(uri), content, mapper, source);
96
+ this.files.push(file);
97
+ this.client.didOpen(file);
98
+ }
99
+ closeFile(uri) {
100
+ const file = this.getFile(uri);
101
+ if (file) {
102
+ this.files = this.files.filter((f) => f.uri !== uri);
103
+ this.client.didClose(uri);
104
+ }
105
+ }
106
+ }
107
+ var Sync;
108
+ (function (Sync) {
109
+ Sync[Sync["AlwaysIfSmaller"] = 1024] = "AlwaysIfSmaller";
110
+ })(Sync || (Sync = {}));
111
+ function contentChangesFor(file, newContent, mapper, supportInc) {
112
+ if (!supportInc || newContent.length < Sync.AlwaysIfSmaller) {
113
+ return [{ text: newContent }];
114
+ }
115
+ const changes = computeIncrementalChanges(file.content, newContent);
116
+ return changes.reverse();
117
+ }
118
+ //# sourceMappingURL=LSPWorkspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LSPWorkspace.js","sourceRoot":"","sources":["../src/LSPWorkspace.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- import { DefaultRenderer } from '@kerebron/extension-autocomplete/DefaultRenderer';
2
- import { TextRange } from '@kerebron/editor';
3
- import { type AutocompleteProps } from '@kerebron/extension-autocomplete';
1
+ import { DefaultRenderer } from '@kerebron/extension-ui/autocomplete/DefaultRenderer';
2
+ import { AutocompleteConfig } from '@kerebron/extension-ui/autocomplete';
4
3
  import { ExtensionLsp } from './ExtensionLsp.js';
5
4
  interface CompletionItem {
6
5
  label: string;
@@ -12,12 +11,7 @@ export declare class CustomRenderer extends DefaultRenderer<CompletionItem> {
12
11
  }
13
12
  export declare function cleanPlaceholders(input: string): string;
14
13
  export declare function createLspAutocomplete(extensionLsp: ExtensionLsp): {
15
- autocompleteConfig: {
16
- renderer: CustomRenderer;
17
- matchers: any[];
18
- getItems: (query: string, props: AutocompleteProps) => Promise<CompletionItem[]>;
19
- onSelect: (selected: CompletionItem, range: TextRange) => Promise<void>;
20
- };
14
+ autocompleteConfig: AutocompleteConfig;
21
15
  };
22
16
  export {};
23
17
  //# sourceMappingURL=createLspAutocomplete.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createLspAutocomplete.d.ts","sourceRoot":"","sources":["../src/createLspAutocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAmB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAe,SAAQ,eAAe,CAAC,cAAc,CAAC;IACxD,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM;CAa1D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY;;;;0BAOpC,MAAM,SAAS,iBAAiB;6BAiC7B,cAAc,SAAS,SAAS;;EAiB9D"}
1
+ {"version":3,"file":"createLspAutocomplete.d.ts","sourceRoot":"","sources":["../src/createLspAutocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAGtF,OAAO,EACL,kBAAkB,EAGnB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAe,SAAQ,eAAe,CAAC,cAAc,CAAC;IACxD,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM;CAa1D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,GACzB;IAAE,kBAAkB,EAAE,kBAAkB,CAAA;CAAE,CAyD5C"}
@@ -1,5 +1,4 @@
1
- import { DefaultRenderer } from '@kerebron/extension-autocomplete/DefaultRenderer';
2
- import { createRegexMatcher, } from '@kerebron/extension-autocomplete';
1
+ import { DefaultRenderer } from '@kerebron/extension-ui/autocomplete/DefaultRenderer';
3
2
  export class CustomRenderer extends DefaultRenderer {
4
3
  createListItem(item, cnt) {
5
4
  const li = document.createElement('li');
@@ -23,14 +22,14 @@ export function createLspAutocomplete(extensionLsp) {
23
22
  const editor = extensionLsp.getEditor();
24
23
  const renderer = new CustomRenderer(editor);
25
24
  const config = {
26
- renderer,
27
- matchers: [createRegexMatcher([/\w+/, /(^|\s)@\w*/, /^#\w*/])],
25
+ // renderer,
26
+ // matchers: [createRegexMatcher([/\w+/, /(^|\s)@\w*/, /^#\w*/])],
28
27
  getItems: async (query, props) => {
29
28
  const { mapper } = await extensionLsp.source.getMappedContent();
30
29
  const lspPos = mapper.toRawTextLspPos(props.range.from);
31
30
  const client = extensionLsp.getClient(extensionLsp.mainLang);
32
31
  if (client) {
33
- client.sync();
32
+ client.syncFiles();
34
33
  try {
35
34
  const completions = await client.request('textDocument/completion', {
36
35
  textDocument: { uri: extensionLsp.uri },
@@ -1 +1 @@
1
- {"version":3,"file":"createLspAutocomplete.js","sourceRoot":"","sources":["../src/createLspAutocomplete.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createLspAutocomplete.js","sourceRoot":"","sources":["../src/createLspAutocomplete.ts"],"names":[],"mappings":"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"}
package/esm/mod.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from './ExtensionLsp.js';
2
2
  export * from './LSPClient.js';
3
- export * from './workspace.js';
3
+ export * from './LSPWorkspace.js';
4
4
  //# sourceMappingURL=mod.d.ts.map
package/esm/mod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
package/esm/mod.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from './ExtensionLsp.js';
2
2
  export * from './LSPClient.js';
3
- export * from './workspace.js';
3
+ export * from './LSPWorkspace.js';
4
4
  //# sourceMappingURL=mod.js.map
package/esm/mod.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
@@ -1,8 +1,6 @@
1
- import type * as lsp from 'vscode-languageserver-protocol';
2
1
  import type { EditorUi } from '@kerebron/editor';
3
- import { LSPClient } from './LSPClient.js';
4
2
  import { PositionMapper } from '@kerebron/extension-markdown/PositionMapper';
5
- export interface LspSource {
3
+ export interface LSPSource {
6
4
  ui: EditorUi;
7
5
  getMappedContent(): Promise<{
8
6
  content: string;
@@ -14,49 +12,22 @@ export interface WorkspaceFile {
14
12
  languageId: string;
15
13
  version: number;
16
14
  content: string;
17
- source: LspSource;
15
+ source: LSPSource;
18
16
  getUi(): EditorUi | undefined;
19
17
  mapper: PositionMapper;
20
18
  }
21
- interface WorkspaceFileUpdate {
22
- file: WorkspaceFile;
23
- prevDoc: string;
24
- changes: lsp.TextDocumentContentChangeEvent[];
25
- }
26
- export declare abstract class Workspace {
27
- readonly client: LSPClient;
19
+ export declare abstract class Workspace extends EventTarget {
28
20
  abstract files: WorkspaceFile[];
29
21
  protected isConnected: boolean;
30
- constructor(client: LSPClient);
22
+ constructor();
31
23
  getFile(uri: string): WorkspaceFile | null;
32
- abstract syncFiles(): readonly WorkspaceFileUpdate[];
24
+ abstract syncFiles(): void;
33
25
  requestFile(uri: string): Promise<WorkspaceFile | null>;
34
- abstract openFile(uri: string, languageId: string, source: LspSource): void;
26
+ abstract openFile(uri: string, languageId: string, source: LSPSource): void;
35
27
  abstract changedFile(uri: string): void;
36
28
  abstract closeFile(uri: string): void;
37
29
  connected(): Promise<void>;
38
30
  disconnected(): void;
39
31
  getUi(uri: string): Promise<EditorUi | undefined>;
40
32
  }
41
- declare class DefaultWorkspaceFile implements WorkspaceFile {
42
- readonly uri: string;
43
- readonly languageId: string;
44
- version: number;
45
- content: string;
46
- mapper: PositionMapper;
47
- source: LspSource;
48
- syncedContent: string;
49
- constructor(uri: string, languageId: string, version: number, content: string, mapper: PositionMapper, source: LspSource);
50
- getUi(): EditorUi;
51
- }
52
- export declare class DefaultWorkspace extends Workspace {
53
- files: DefaultWorkspaceFile[];
54
- private fileVersions;
55
- nextFileVersion(uri: string): number;
56
- syncFiles(): WorkspaceFileUpdate[];
57
- changedFile(uri: string): Promise<void>;
58
- openFile(uri: string, languageId: string, source: LspSource): Promise<void>;
59
- closeFile(uri: string): void;
60
- }
61
- export {};
62
33
  //# sourceMappingURL=workspace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,gCAAgC,CAAC;AAG3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAG7E,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,QAAQ,CAAC;IACb,gBAAgB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,IAAI,QAAQ,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC,8BAA8B,EAAE,CAAC;CAC/C;AAED,8BAAsB,SAAS;IAK3B,QAAQ,CAAC,MAAM,EAAE,SAAS;IAJ5B,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC;IAChC,SAAS,CAAC,WAAW,UAAS;gBAGnB,MAAM,EAAE,SAAS;IAG5B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAI1C,QAAQ,CAAC,SAAS,IAAI,SAAS,mBAAmB,EAAE;IAEpD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIvD,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI;IAC3E,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACvC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAE/B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC,YAAY,IAAI,IAAI;IAOpB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;CAIlD;AAED,cAAM,oBAAqB,YAAW,aAAa;IAG/C,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,SAAS;IAPnB,aAAa,EAAE,MAAM,CAAM;gBAEvB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,SAAS;IAI1B,KAAK;CAGN;AAED,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,KAAK,EAAE,oBAAoB,EAAE,CAAM;IACnC,OAAO,CAAC,YAAY,CAAkD;IAEtE,eAAe,CAAC,GAAG,EAAE,MAAM;IAI3B,SAAS;IAaH,WAAW,CAAC,GAAG,EAAE,MAAM;IAkCvB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IAsBjE,SAAS,CAAC,GAAG,EAAE,MAAM;CAOtB"}
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAE7E,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,QAAQ,CAAC;IACb,gBAAgB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,IAAI,QAAQ,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,8BAAsB,SAAU,SAAQ,WAAW;IACjD,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC;IAChC,SAAS,CAAC,WAAW,UAAS;;IAM9B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAI1C,QAAQ,CAAC,SAAS,IAAI,IAAI;IAE1B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIvD,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI;IAC3E,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACvC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAE/B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,YAAY,IAAI,IAAI;IAIpB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;CAIlD"}
package/esm/workspace.js CHANGED
@@ -1,10 +1,7 @@
1
- import { TextDocumentSyncKind } from 'vscode-languageserver-protocol';
2
- import { computeIncrementalChanges } from './computeIncrementalChanges.js';
3
- export class Workspace {
4
- client;
1
+ export class Workspace extends EventTarget {
5
2
  isConnected = false;
6
- constructor(client) {
7
- this.client = client;
3
+ constructor() {
4
+ super();
8
5
  }
9
6
  getFile(uri) {
10
7
  return this.files.find((f) => f.uri == uri) || null;
@@ -14,14 +11,8 @@ export class Workspace {
14
11
  }
15
12
  async connected() {
16
13
  this.isConnected = true;
17
- for await (const file of this.files) {
18
- const result = await this.client.didOpen(file);
19
- }
20
14
  }
21
15
  disconnected() {
22
- for (const file of this.files) {
23
- this.client.workspace.closeFile(file.uri);
24
- }
25
16
  this.isConnected = false;
26
17
  }
27
18
  getUi(uri) {
@@ -29,90 +20,4 @@ export class Workspace {
29
20
  return Promise.resolve(file ? file.getUi() : undefined);
30
21
  }
31
22
  }
32
- class DefaultWorkspaceFile {
33
- uri;
34
- languageId;
35
- version;
36
- content;
37
- mapper;
38
- source;
39
- syncedContent = '';
40
- constructor(uri, languageId, version, content, mapper, source) {
41
- this.uri = uri;
42
- this.languageId = languageId;
43
- this.version = version;
44
- this.content = content;
45
- this.mapper = mapper;
46
- this.source = source;
47
- }
48
- getUi() {
49
- return this.source.ui;
50
- }
51
- }
52
- export class DefaultWorkspace extends Workspace {
53
- files = [];
54
- fileVersions = Object.create(null);
55
- nextFileVersion(uri) {
56
- return this.fileVersions[uri] = (this.fileVersions[uri] ?? -1) + 1;
57
- }
58
- syncFiles() {
59
- if (!this.client.supportSync) {
60
- return [];
61
- }
62
- const result = [];
63
- for (const file of this.files) {
64
- this.changedFile(file.uri);
65
- }
66
- return result;
67
- }
68
- async changedFile(uri) {
69
- const file = this.files.find((f) => f.uri == uri) || null;
70
- if (file) {
71
- const { content, mapper } = await file.source.getMappedContent();
72
- if (!this.isConnected) {
73
- file.content = content;
74
- file.mapper = mapper;
75
- return;
76
- }
77
- if (await this.client.notification('textDocument/didChange', {
78
- textDocument: { uri: file.uri, version: file.version },
79
- contentChanges: contentChangesFor(file, content, mapper, this.client.supportSync == TextDocumentSyncKind.Incremental),
80
- })) {
81
- file.syncedContent = file.content;
82
- file.content = content;
83
- file.mapper = mapper;
84
- file.version = this.nextFileVersion(file.uri);
85
- }
86
- }
87
- }
88
- async openFile(uri, languageId, source) {
89
- // if (uri) {}
90
- if (this.getFile(uri)) {
91
- this.closeFile(uri);
92
- }
93
- const mappedContent = await source.getMappedContent();
94
- const { content, mapper } = mappedContent;
95
- const file = new DefaultWorkspaceFile(uri, languageId, this.nextFileVersion(uri), content, mapper, source);
96
- this.files.push(file);
97
- this.client.didOpen(file);
98
- }
99
- closeFile(uri) {
100
- const file = this.getFile(uri);
101
- if (file) {
102
- this.files = this.files.filter((f) => f.uri !== uri);
103
- this.client.didClose(uri);
104
- }
105
- }
106
- }
107
- var Sync;
108
- (function (Sync) {
109
- Sync[Sync["AlwaysIfSmaller"] = 1024] = "AlwaysIfSmaller";
110
- })(Sync || (Sync = {}));
111
- function contentChangesFor(file, newContent, mapper, supportInc) {
112
- if (!supportInc || newContent.length < Sync.AlwaysIfSmaller) {
113
- return [{ text: newContent }];
114
- }
115
- const changes = computeIncrementalChanges(file.content, newContent);
116
- return changes.reverse();
117
- }
118
23
  //# sourceMappingURL=workspace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAgB,SAAU,SAAQ,WAAW;IAEvC,WAAW,GAAG,KAAK,CAAC;IAE9B;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC;IACtD,CAAC;IAID,WAAW,CAAC,GAAW;QACrB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IAMD,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,YAAY;QACV,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAW;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kerebron/extension-lsp",
3
- "version": "0.7.8",
3
+ "version": "0.8.1",
4
4
  "license": "MIT",
5
5
  "module": "./esm/mod.js",
6
6
  "exports": {
@@ -10,8 +10,8 @@
10
10
  "./types": {
11
11
  "import": "./esm/types.js"
12
12
  },
13
- "./LspWebSocketTransport": {
14
- "import": "./esm/LspWebSocketTransport.js"
13
+ "./LSPWebSocketTransport": {
14
+ "import": "./esm/LSPWebSocketTransport.js"
15
15
  }
16
16
  },
17
17
  "scripts": {},
@@ -20,9 +20,9 @@
20
20
  "src"
21
21
  ],
22
22
  "dependencies": {
23
- "@kerebron/editor": "0.7.8",
24
- "@kerebron/extension-autocomplete": "0.7.8",
25
- "@kerebron/extension-markdown": "0.7.8",
23
+ "@kerebron/editor": "0.8.1",
24
+ "@kerebron/extension-markdown": "0.8.1",
25
+ "@kerebron/extension-ui": "0.8.1",
26
26
  "prosemirror-state": "1.4.3",
27
27
  "prosemirror-view": "1.40.0",
28
28
  "vscode-languageserver-protocol": "3.17.5"
@@ -2,19 +2,16 @@ import { Plugin } from 'prosemirror-state';
2
2
 
3
3
  import { Extension } from '@kerebron/editor';
4
4
  import { type ExtensionMarkdown } from '@kerebron/extension-markdown';
5
- import { type ExtensionAutocomplete } from '@kerebron/extension-autocomplete';
6
5
  import { PositionMapper } from '@kerebron/extension-markdown/PositionMapper';
7
6
 
8
7
  import { LSPClient, Transport } from './LSPClient.js';
9
- import { AutocompletePlugin } from '@kerebron/extension-autocomplete/AutocompletePlugin';
10
- import { DiagnosticPlugin } from './DiagnosticPlugin.js';
8
+ import { LSPPlugin } from './LSPPlugin.js';
11
9
  import { createLspAutocomplete } from './createLspAutocomplete.js';
12
- import { LspSource } from './workspace.js';
13
10
 
14
- export type LspTransportGetter = (lang: string) => Transport | undefined;
11
+ export type LSPTransportGetter = (lang: string) => Transport | undefined;
15
12
 
16
13
  export interface LspConfig {
17
- getLspTransport: LspTransportGetter;
14
+ getLspTransport: LSPTransportGetter;
18
15
  }
19
16
 
20
17
  export class ExtensionLsp extends Extension {
@@ -22,9 +19,8 @@ export class ExtensionLsp extends Extension {
22
19
  clients: Record<string, LSPClient> = {};
23
20
  uri: string | undefined;
24
21
  extensionMarkdown!: ExtensionMarkdown;
25
- extensionAutocomplete!: ExtensionAutocomplete;
26
22
  mainLang: string = 'markdown';
27
- source!: LspSource;
23
+ // source!: LSPSource;
28
24
 
29
25
  constructor(public override config: LspConfig) {
30
26
  super(config);
@@ -35,8 +31,7 @@ export class ExtensionLsp extends Extension {
35
31
 
36
32
  const { autocompleteConfig } = createLspAutocomplete(this);
37
33
 
38
- plugins.push(new AutocompletePlugin(autocompleteConfig, this.editor));
39
- plugins.push(new DiagnosticPlugin({}, this));
34
+ plugins.push(new LSPPlugin(this.config, this));
40
35
 
41
36
  return plugins;
42
37
  }
@@ -44,62 +39,67 @@ export class ExtensionLsp extends Extension {
44
39
  override created() {
45
40
  this.mainLang = this.editor.config.languageID || 'markdown';
46
41
 
47
- this.source = {
48
- ui: this.editor.ui,
49
- getMappedContent: async () => {
50
- const editor = this.editor;
51
- const result = await this.extensionMarkdown.toMarkdown(
52
- editor.state.doc,
53
- );
54
- const mapper = new PositionMapper(editor, result.rawTextMap);
55
- return {
56
- ...result,
57
- mapper,
58
- };
59
- },
60
- };
42
+ // this.source = {
43
+ // ui: this.editor.ui,
44
+ // getMappedContent: async () => {
45
+ // const editor = this.editor;
46
+ // const result = await this.extensionMarkdown.toMarkdown(
47
+ // editor.state.doc,
48
+ // );
49
+ // const mapper = new PositionMapper(editor, result.rawTextMap);
50
+ // return {
51
+ // ...result,
52
+ // mapper,
53
+ // };
54
+ // },
55
+ // };
61
56
 
62
57
  const extensionMarkdown: ExtensionMarkdown | undefined = this.editor
63
- .getExtension('markdown');
58
+ .ci.resolve('markdown');
64
59
  if (!extensionMarkdown) {
65
60
  throw new Error('No markdown extension');
66
61
  }
67
62
  this.extensionMarkdown = extensionMarkdown;
68
63
 
69
64
  this.editor.addEventListener('doc:loaded', async () => {
70
- const languageID = this.mainLang;
71
65
  this.uri = this.editor.config.uri;
72
- if (this.uri) {
73
- const client = this.getClient(this.mainLang);
74
- if (client) {
75
- client.connect(this.uri, this.source);
76
- await client.restart();
77
- client.workspace.openFile(
78
- this.uri,
79
- languageID,
80
- this.source,
81
- );
82
- }
66
+ if (this.editor.config.uri) {
67
+ const tr = this.editor.view.state.tr;
68
+ tr.setMeta('workspace', {
69
+ operation: 'openFile',
70
+ node: this.editor.view.state.doc,
71
+ // pos: this.getPos(),
72
+ uri: this.editor.config.uri,
73
+ lang: this.mainLang,
74
+ });
75
+ this.editor.view.dispatch(tr);
83
76
  }
77
+
78
+ // TODO start autocomplete...
79
+ // this.editor.chain()/aaaa.run();
84
80
  });
85
81
 
86
82
  this.editor.addEventListener('changed', () => {
87
83
  if (this.editor.config.uri) {
88
- const client = this.getClient(this.mainLang);
89
- if (client) {
90
- client.workspace.changedFile(
91
- this.editor.config.uri,
92
- );
93
- }
84
+ const tr = this.editor.view.state.tr;
85
+ tr.setMeta('workspace', {
86
+ operation: 'modifyFile',
87
+ node: this.editor.view.state.doc,
88
+ // pos: this.getPos(),
89
+ uri: this.editor.config.uri,
90
+ lang: this.mainLang,
91
+ });
92
+ this.editor.view.dispatch(tr);
94
93
  }
95
94
  });
96
95
 
97
96
  this.editor.addEventListener('beforeDestroy', () => {
98
97
  if (this.uri) {
99
- const client = this.getClient(this.mainLang);
100
- if (client) {
101
- client.disconnect(this.uri);
102
- }
98
+ const tr = this.editor.view.state.tr;
99
+ tr.setMeta('workspace', {
100
+ operation: 'closeFile',
101
+ uri: this.editor.config.uri,
102
+ });
103
103
  }
104
104
  });
105
105
  }