@lvce-editor/shared-process 0.0.25 → 0.0.28

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 (56) hide show
  1. package/config/builtinCommands.json +101 -85
  2. package/config/defaultKeyBindings.json +6 -1
  3. package/index.js +2 -2
  4. package/package.json +12 -8
  5. package/src/parts/Assert/Assert.js +12 -5
  6. package/src/parts/ChildProcess/ChildProcessWithFork.js +19 -0
  7. package/src/parts/Command/Command.js +14 -16
  8. package/src/parts/Developer/Developer.ipc.js +2 -8
  9. package/src/parts/ExtensionHost/ExtensionHost.ipc.js +10 -68
  10. package/src/parts/ExtensionHost/ExtensionHost.js +59 -138
  11. package/src/parts/ExtensionHostIpc/ExtensionHostIpc.js +5 -0
  12. package/src/parts/ExtensionHostIpc/ExtensionHostIpcWithChildProcess.js +57 -0
  13. package/src/parts/ExtensionHostIpc/ExtensionHostIpcWithWorker.js +38 -0
  14. package/src/parts/ExtensionHostRpc/ExtensionHostRpc.js +82 -0
  15. package/src/parts/ExtensionManagement/ExtensionManagement.ipc.js +11 -0
  16. package/src/parts/ExtensionManagement/ExtensionManagement.js +5 -2
  17. package/src/parts/{ExtensionHost/ExtensionHostColorTheme.js → ExtensionManagement/ExtensionManagementColorTheme.js} +1 -1
  18. package/src/parts/{ExtensionHost/ExtensionHostIconTheme.js → ExtensionManagement/ExtensionManagementIconTheme.js} +1 -1
  19. package/src/parts/{ExtensionHost/ExtensionHostLanguages.js → ExtensionManagement/ExtensionManagementLanguages.js} +1 -1
  20. package/src/parts/FileSystem/FileSystem.js +13 -1
  21. package/src/parts/JsonRpc/JsonRpc.js +2 -2
  22. package/src/parts/OutputChannel/OutputChannel.ipc.js +1 -1
  23. package/src/parts/ParentIpc/ParentIpc.js +93 -47
  24. package/src/parts/Platform/Platform.js +1 -1
  25. package/src/parts/Preferences/Preferences.js +0 -2
  26. package/src/parts/PrettyError/PrettyError.js +5 -2
  27. package/src/parts/RequiresSocket/RequiresSocket.js +6 -5
  28. package/src/parts/Stats/Stats.js +8 -7
  29. package/src/parts/Terminal/Terminal.ipc.js +2 -2
  30. package/src/parts/Terminal/Terminal.js +1 -1
  31. package/src/parts/Timeout/Timeout.js +7 -0
  32. package/src/sharedProcessMain.js +13 -4
  33. package/src/parts/Extension/Extension.js +0 -7
  34. package/src/parts/ExtensionHost/ExtensionHostBraceCompletion.js +0 -14
  35. package/src/parts/ExtensionHost/ExtensionHostClosingTag.js +0 -14
  36. package/src/parts/ExtensionHost/ExtensionHostCommand.js +0 -19
  37. package/src/parts/ExtensionHost/ExtensionHostCompletion.js +0 -12
  38. package/src/parts/ExtensionHost/ExtensionHostDefinition.js +0 -12
  39. package/src/parts/ExtensionHost/ExtensionHostDiagnostic.js +0 -7
  40. package/src/parts/ExtensionHost/ExtensionHostFileSystem.js +0 -23
  41. package/src/parts/ExtensionHost/ExtensionHostFormatting.js +0 -4
  42. package/src/parts/ExtensionHost/ExtensionHostHover.js +0 -12
  43. package/src/parts/ExtensionHost/ExtensionHostImplementation.js +0 -12
  44. package/src/parts/ExtensionHost/ExtensionHostManagement.js +0 -26
  45. package/src/parts/ExtensionHost/ExtensionHostOutput.js +0 -3
  46. package/src/parts/ExtensionHost/ExtensionHostQuickPick.js +0 -6
  47. package/src/parts/ExtensionHost/ExtensionHostReference.js +0 -12
  48. package/src/parts/ExtensionHost/ExtensionHostRename.js +0 -27
  49. package/src/parts/ExtensionHost/ExtensionHostSemanticTokens.js +0 -10
  50. package/src/parts/ExtensionHost/ExtensionHostSourceControl.js +0 -15
  51. package/src/parts/ExtensionHost/ExtensionHostStats.js +0 -3
  52. package/src/parts/ExtensionHost/ExtensionHostStatusBar.js +0 -7
  53. package/src/parts/ExtensionHost/ExtensionHostTabCompletion.js +0 -12
  54. package/src/parts/ExtensionHost/ExtensionHostTextDocument.js +0 -35
  55. package/src/parts/ExtensionHost/ExtensionHostTypeDefinition.js +0 -12
  56. package/src/parts/ExtensionHost/ExtensionHostWorkspace.js +0 -3
@@ -1,6 +1,6 @@
1
1
  import * as Error from '../Error/Error.js'
2
- import * as ExtensionManagement from '../ExtensionManagement/ExtensionManagement.js'
3
2
  import * as ReadJson from '../JsonFile/JsonFile.js'
3
+ import * as ExtensionManagement from './ExtensionManagement.js'
4
4
 
5
5
  export const getIconTheme = async (iconThemeId) => {
6
6
  const extensions = await ExtensionManagement.getExtensions()
@@ -2,9 +2,9 @@ import { join } from 'node:path'
2
2
  import { pathToFileURL } from 'node:url'
3
3
  import VError from 'verror'
4
4
  import * as Error from '../Error/Error.js'
5
- import * as ExtensionManagement from '../ExtensionManagement/ExtensionManagement.js'
6
5
  import * as ReadJson from '../JsonFile/JsonFile.js'
7
6
  import * as Path from '../Path/Path.js'
7
+ import * as ExtensionManagement from './ExtensionManagement.js'
8
8
 
9
9
  const getExtensionLanguages = (extension) => {
10
10
  if (!extension.languages) {
@@ -6,6 +6,7 @@ import * as Error from '../Error/Error.js'
6
6
  import * as Path from '../Path/Path.js'
7
7
  import * as Trash from '../Trash/Trash.js'
8
8
  import * as Platform from '../Platform/Platform.js'
9
+ import VError from 'verror'
9
10
 
10
11
  export const state = {
11
12
  watcherMap: Object.create(null),
@@ -15,6 +16,17 @@ export const copy = async (source, target) => {
15
16
  try {
16
17
  await fs.cp(source, target, { recursive: true })
17
18
  } catch (error) {
19
+ if (
20
+ error &&
21
+ error.message &&
22
+ error.message.startsWith(
23
+ 'Invalid src or dest: cp returned EINVAL (src and dest cannot be the same)'
24
+ )
25
+ ) {
26
+ throw new VError(
27
+ `Failed to copy "${source}" to "${target}": src and dest cannot be the same`
28
+ )
29
+ }
18
30
  throw new Error.OperationalError({
19
31
  cause: error,
20
32
  code: 'E_FILE_SYSTEM_ERROR',
@@ -26,7 +38,7 @@ export const copy = async (source, target) => {
26
38
 
27
39
  export const readFile = async (path) => {
28
40
  try {
29
- const content = await fs.readFile(path, 'utf-8')
41
+ const content = await fs.readFile(path, 'utf8')
30
42
  return content
31
43
  } catch (error) {
32
44
  throw new Error.OperationalError({
@@ -8,11 +8,11 @@ export const send = (transport, method, ...params) => {
8
8
  })
9
9
  }
10
10
 
11
- export const invoke = (transport, method, ...params) => {
11
+ export const invoke = (ipc, method, ...params) => {
12
12
  return new Promise((resolve, reject) => {
13
13
  // TODO use one map instead of two
14
14
  const callbackId = Callback.register(resolve, reject)
15
- transport.send({
15
+ ipc.send({
16
16
  jsonrpc: '2.0',
17
17
  method,
18
18
  params,
@@ -10,7 +10,7 @@ const open = (socket, id, path) => {
10
10
  console.log({path})
11
11
  Assert.object(socket)
12
12
  // Assert.string(id)
13
- Assert.string(path )
13
+ Assert.string(path)
14
14
  if (!socket) {
15
15
  console.warn('socket not available')
16
16
  return
@@ -1,10 +1,13 @@
1
1
  import { MessagePort, parentPort } from 'node:worker_threads'
2
+ import VError from 'verror'
2
3
  import * as Callback from '../Callback/Callback.js'
3
4
  import * as Command from '../Command/Command.js'
4
5
  import * as Debug from '../Debug/Debug.js'
5
6
  import * as Error from '../Error/Error.js'
6
7
  import { requiresSocket } from '../RequiresSocket/RequiresSocket.js'
7
-
8
+ import * as Platform from '../Platform/Platform.js'
9
+ import * as ExtensionHostIpc from '../ExtensionHostIpc/ExtensionHostIpc.js'
10
+ import * as ExtensionHostRpc from '../ExtensionHostRpc/ExtensionHostRpc.js'
8
11
  // TODO add tests for this
9
12
 
10
13
  // TODO handle structure: one shared process multiple extension hosts
@@ -30,53 +33,97 @@ export const electronSend = (message) => {
30
33
  }
31
34
  }
32
35
 
33
- const handleMessageFromParentProcess = async (message, handle) => {
34
- if (handle) {
35
- handle.on('error', (error) => {
36
- if (error && error.code === 'ECONNRESET') {
37
- return
38
- }
39
- console.info('[info shared process: handle error]', error)
40
- })
41
- Command.execute(
42
- /* WebSocketServer.handleUpgrade */ 5621,
43
- /* message */ message,
44
- /* handle */ handle
45
- )
46
- } else if (message.result) {
47
- Callback.resolve(message.id, message.result)
48
- } else if (message.method) {
49
- console.log({ message })
50
- if (message.id) {
51
- try {
52
- console.log('INISDE HERE')
53
- const result = requiresSocket(message.method)
54
- ? await Command.invoke(message.method, handle, ...message.params)
55
- : await Command.invoke(message.method, ...message.params)
56
- electronSend({
57
- jsonrpc: '2.0',
58
- id: message.id,
59
- result: result ?? null,
60
- })
61
- } catch (error) {
62
- console.error('[shared process] command failed to execute')
63
- console.error(error)
64
- electronSend({
65
- jsonrpc: '2.0',
66
- code: /* ExpectedError */ -32000,
67
- id: message.id,
68
- error: 'ExpectedError',
69
- // @ts-ignore
70
- data: error.toString(),
71
- })
72
- }
73
- } else {
74
- // TODO handle error
75
- Command.execute(message.method, null, ...message.params)
36
+ const handleWebSocketSharedProcess = (message, handle) => {
37
+ // TODO when it is an extension host websocket, spawn extension host
38
+ handle.on('error', (error) => {
39
+ if (error && error.code === 'ECONNRESET') {
40
+ return
41
+ }
42
+ console.info('[info shared process: handle error]', error)
43
+ })
44
+ Command.execute(
45
+ /* WebSocketServer.handleUpgrade */ 5621,
46
+ /* message */ message,
47
+ /* handle */ handle
48
+ )
49
+ }
50
+
51
+ // TODO lazyload modules for spawning extension host, they are only needed later
52
+ const handleWebSocketExtensionHost = async (message, handle) => {
53
+ // console.log('[shared-process] received extension host websocket', message)
54
+ const ipc = ExtensionHostIpc.create()
55
+ console.info('[sharedprocess] creating extension ipc')
56
+ const rpc = await ExtensionHostRpc.create(ipc, handle)
57
+ console.info('[sharedprocess] created extension host rpc')
58
+ ipc._process.send(message, handle)
59
+ // rpc.send(message)
60
+ // console.log('spawned extension host')
61
+ // console.log(rpc)
62
+ }
63
+
64
+ const handleWebSocket = (message, handle) => {
65
+ const headers = message.headers
66
+ if (!headers) {
67
+ throw new VError('missing websocket headers')
68
+ }
69
+ const protocol = headers['sec-websocket-protocol']
70
+ if (!protocol) {
71
+ throw new VError('missing sec websocket protocol header')
72
+ }
73
+ switch (protocol) {
74
+ case 'lvce.shared-process':
75
+ return handleWebSocketSharedProcess(message, handle)
76
+ case 'lvce.extension-host':
77
+ return handleWebSocketExtensionHost(message, handle)
78
+ default:
79
+ throw new VError(`unsupported sec-websocket-procotol ${protocol}`)
80
+ }
81
+ }
82
+
83
+ const handleJsonRpcResult = (message) => {
84
+ Callback.resolve(message.id, message.result)
85
+ }
86
+
87
+ const handleJsonRpcMessage = async (message, handle) => {
88
+ if (message.id) {
89
+ try {
90
+ const result = requiresSocket(message.method)
91
+ ? await Command.invoke(message.method, handle, ...message.params)
92
+ : await Command.invoke(message.method, ...message.params)
93
+ electronSend({
94
+ jsonrpc: '2.0',
95
+ id: message.id,
96
+ result: result ?? null,
97
+ })
98
+ } catch (error) {
99
+ console.error('[shared process] command failed to execute')
100
+ console.error(error)
101
+ electronSend({
102
+ jsonrpc: '2.0',
103
+ code: /* ExpectedError */ -32000,
104
+ id: message.id,
105
+ error: 'ExpectedError',
106
+ // @ts-ignore
107
+ data: error.toString(),
108
+ })
76
109
  }
77
110
  } else {
78
- console.warn('unknown message', message)
111
+ // TODO handle error
112
+ Command.execute(message.method, null, ...message.params)
113
+ }
114
+ }
115
+
116
+ const handleMessageFromParentProcess = async (message, handle) => {
117
+ if (handle) {
118
+ return handleWebSocket(message, handle)
119
+ }
120
+ if (message.result) {
121
+ return handleJsonRpcResult(message)
79
122
  }
123
+ if (message.method) {
124
+ return handleJsonRpcMessage(message, handle)
125
+ }
126
+ console.warn('unknown message', message)
80
127
  }
81
128
 
82
129
  /**
@@ -162,7 +209,7 @@ const electronInitialize = (initializeMessage) => {
162
209
  },
163
210
  })
164
211
  }
165
- return
212
+
166
213
  }
167
214
  } else {
168
215
  Command.execute(message.method, fakeSocket, ...message.params)
@@ -179,7 +226,6 @@ const handleMessageFromParentProcessElectron = async (message) => {
179
226
  electronInitialize(message)
180
227
  return
181
228
  }
182
- console.log({ message })
183
229
  if ('result' in message) {
184
230
  Callback.resolve(message.id, message.result)
185
231
  return
@@ -1,6 +1,6 @@
1
- import { extensionHostPath } from '@lvce-editor/extension-host'
2
1
  import { homedir, tmpdir } from 'node:os'
3
2
  import { sep } from 'node:path'
3
+ import { extensionHostPath } from '@lvce-editor/extension-host'
4
4
  import { xdgCache, xdgConfig, xdgData, xdgState } from 'xdg-basedir'
5
5
  import * as Path from '../Path/Path.js'
6
6
  import * as Root from '../Root/Root.js'
@@ -1,9 +1,7 @@
1
- import { join } from 'node:path'
2
1
  import VError from 'verror'
3
2
  import * as JsonFile from '../JsonFile/JsonFile.js'
4
3
  import * as Platform from '../Platform/Platform.js'
5
4
 
6
- const CACHED_SETTINGS_PATH = '~/.cache/vscode/cachedSettings.json'
7
5
  // TODO need jsonc parser for settings with comments
8
6
 
9
7
  export const getUserPreferences = async () => {
@@ -13,8 +13,11 @@ const getActualPath = (fileUri) => {
13
13
 
14
14
  export const prepare = (error) => {
15
15
  const message = error.message
16
- if (error.cause) {
17
- error = error.cause()
16
+ if (error && error.cause) {
17
+ const cause = error.cause()
18
+ if (cause) {
19
+ error = cause
20
+ }
18
21
  }
19
22
  const cleanedStack = cleanStack(error.stack)
20
23
  const lines = cleanedStack.split('\n')
@@ -1,11 +1,12 @@
1
1
  // TODO find a better way to do this
2
2
  // most commands don't require sockets
3
3
  // but output channel and terminal need to continuously send data through the socket
4
- const METHODS_THAT_REQUIRE_SOCKET = [
5
- 'OutputChannel.open', // OutputChannel.open
6
- 'ExtensionHost.start', // ExtensionHost.start
7
- ]
4
+ const METHODS_THAT_REQUIRE_SOCKET = new Set([
5
+ 'OutputChannel.open',
6
+ 'ExtensionHost.start',
7
+ 'ExtensionHost.send',
8
+ ])
8
9
 
9
10
  export const requiresSocket = (method) => {
10
- return METHODS_THAT_REQUIRE_SOCKET.includes(method)
11
+ return METHODS_THAT_REQUIRE_SOCKET.has(method)
11
12
  }
@@ -1,18 +1,19 @@
1
+ // parse ps output based on vscode https://github.com/microsoft/vscode/blob/c0769274fa136b45799edeccc0d0a2f645b75caf/src/vs/base/node/ps.ts (License MIT)
2
+
1
3
  import * as Exec from '../Exec/Exec.js'
2
4
 
3
- // parse ps output based on vscode https://github.com/microsoft/vscode/blob/c0769274fa136b45799edeccc0d0a2f645b75caf/src/vs/base/node/ps.ts (License MIT)
5
+ const PID_CMD =
6
+ /^\s*(\d+)\s+(\d+)\s+(\d+\.\d+)\s+(\d+\.\d+)\s+(.+)$/
4
7
 
5
8
  const parsePsOutputLine = (line) => {
6
- const PID_CMD =
7
- /^\s*([0-9]+)\s+([0-9]+)\s+([0-9]+\.[0-9]+)\s+([0-9]+\.[0-9]+)\s+(.+)$/
8
9
  const matches = PID_CMD.exec(line.trim())
9
10
  if (matches && matches.length === 6) {
10
11
  return {
11
- pid: parseInt(matches[1]),
12
- ppid: parseInt(matches[2]),
12
+ pid: Number.parseInt(matches[1]),
13
+ ppid: Number.parseInt(matches[2]),
13
14
  cwd: matches[5],
14
- load: parseInt(matches[3]),
15
- mem: parseInt(matches[4]),
15
+ load: Number.parseInt(matches[3]),
16
+ mem: Number.parseInt(matches[4]),
16
17
  }
17
18
  }
18
19
  }
@@ -1,6 +1,6 @@
1
1
  import * as Command from '../Command/Command.js'
2
- import * as Terminal from './Terminal.js'
3
2
  import * as Assert from '../Assert/Assert.js'
3
+ import * as Terminal from './Terminal.js'
4
4
 
5
5
  const create = (socket, id, cwd) => {
6
6
  Assert.object(socket)
@@ -24,7 +24,7 @@ const create = (socket, id, cwd) => {
24
24
  Terminal.create(socket, id, cwd)
25
25
  }
26
26
 
27
- const write = ( id, input) => {
27
+ const write = (id, input) => {
28
28
  console.log({ id, input})
29
29
  Terminal.write(id, input)
30
30
  }
@@ -1,10 +1,10 @@
1
1
  import { ChildProcess, fork } from 'node:child_process'
2
2
  import exitHook from 'exit-hook'
3
+ import { ptyHostPath } from '@lvce-editor/pty-host'
3
4
  import * as Debug from '../Debug/Debug.js'
4
5
  import * as Path from '../Path/Path.js'
5
6
  import * as Root from '../Root/Root.js'
6
7
  import * as Assert from '../Assert/Assert.js'
7
- import { ptyHostPath } from '@lvce-editor/pty-host'
8
8
 
9
9
  export const state = {
10
10
  /**
@@ -0,0 +1,7 @@
1
+ export const setTimeout = (listener, ms) => {
2
+ return globalThis.setTimeout(listener, ms)
3
+ }
4
+
5
+ export const clearTimeout = (timeoutId) => {
6
+ globalThis.clearTimeout(timeoutId)
7
+ }
@@ -5,9 +5,18 @@ import * as PrettyError from './parts/PrettyError/PrettyError.js'
5
5
 
6
6
  // TODO use named functions here
7
7
 
8
+ const firstErrorLine = (error) => {
9
+ if (error.stack) {
10
+ return error.stack.slice(0, error.stack.indexOf('\n'))
11
+ }
12
+ if (error.message) {
13
+ return error.message
14
+ }
15
+ return `${error}`
16
+ }
17
+
8
18
  const handleUncaughtExceptionMonitor = (error, origin) => {
9
- console.info(`[shared process] uncaught exception: ${error.stack}`)
10
- console.info('code', error.code)
19
+ console.info(`[shared process] uncaught exception: ${firstErrorLine(error)}`)
11
20
  if (error && error.code === 'EPIPE' && !process.connected) {
12
21
  // parent process is disposed, ignore
13
22
  return
@@ -16,9 +25,9 @@ const handleUncaughtExceptionMonitor = (error, origin) => {
16
25
  // parent process is disposed, ignore
17
26
  return
18
27
  }
19
- console.log(error)
28
+ // console.log(error)
20
29
  const prettyError = PrettyError.prepare(error)
21
- console.error(prettyError.message)
30
+ // console.error(prettyError.message)
22
31
  console.error(prettyError.codeFrame)
23
32
  console.error(prettyError.stack)
24
33
  process.exit(1)
@@ -1,7 +0,0 @@
1
- export const install = (id) => {}
2
-
3
- export const uninstall = (id) => {}
4
-
5
- export const enable = (id) => {}
6
-
7
- export const disable = (id) => {}
@@ -1,14 +0,0 @@
1
- export const executeBraceCompletionProvider = async (
2
- extensionHost,
3
- documentId,
4
- offset,
5
- openingBrace
6
- ) => {
7
- const completions = await extensionHost.invoke(
8
- 'BraceCompletion.execute',
9
- documentId,
10
- offset,
11
- openingBrace
12
- )
13
- return completions
14
- }
@@ -1,14 +0,0 @@
1
- export const executeClosingTagProvider = async (
2
- extensionHost,
3
- documentId,
4
- offset,
5
- openingBrace
6
- ) => {
7
- const completions = await extensionHost.invoke(
8
- 'ClosingTag.execute',
9
- documentId,
10
- offset,
11
- openingBrace
12
- )
13
- return completions
14
- }
@@ -1,19 +0,0 @@
1
- import * as ExtensionManagement from '../ExtensionManagement/ExtensionManagement.js'
2
-
3
- export const executeCommand = async (extensionHost, commandId, ...args) => {
4
- return extensionHost.invoke('executeCommand', commandId, ...args)
5
- }
6
-
7
- const getExtensionCommands = (extension) => {
8
- return extension.commands || []
9
- }
10
-
11
- export const getCommands = async () => {
12
- const extensions = await ExtensionManagement.getExtensions()
13
- return extensions.flatMap(getExtensionCommands)
14
- }
15
-
16
- export const getCommandsIpc = async () => {
17
- const commands = await getCommands()
18
- return commands
19
- }
@@ -1,12 +0,0 @@
1
- export const executeCompletionProvider = async (
2
- extensionHost,
3
- documentId,
4
- offset
5
- ) => {
6
- const completions = await extensionHost.invoke(
7
- 'executeCompletionProvider',
8
- documentId,
9
- offset
10
- )
11
- return completions
12
- }
@@ -1,12 +0,0 @@
1
- export const executeDefinitionProvider = async (
2
- extensionHost,
3
- textDocumentId,
4
- offset
5
- ) => {
6
- const result = await extensionHost.invoke(
7
- 'Definition.executeDefinitionProvider',
8
- textDocumentId,
9
- offset
10
- )
11
- return result
12
- }
@@ -1,7 +0,0 @@
1
- export const executeDiagnosticProvider = async (extensionHost, documentId) => {
2
- const diagnostics = await extensionHost.invoke(
3
- 'Diagnostic.execute',
4
- documentId
5
- )
6
- return diagnostics
7
- }
@@ -1,23 +0,0 @@
1
- export const readFile = (extensionHost, protocol, uri) => {
2
- return extensionHost.invoke('FileSystem.readFile', protocol, uri)
3
- }
4
-
5
- export const writeFile = (extensionHost, protocol, uri, content) => {
6
- return extensionHost.invoke('FileSystem.writeFile', protocol, uri, content)
7
- }
8
-
9
- export const readDirWithFileTypes = (extensionHost, protocol, uri) => {
10
- return extensionHost.invoke('FileSystem.readDirWithFileTypes', protocol, uri)
11
- }
12
-
13
- export const remove = (extensionHost, protocol, uri) => {
14
- return extensionHost.invoke('FileSystem.remove', protocol, uri)
15
- }
16
-
17
- export const rename = (extensionHost, protocol, oldUri, newUri) => {
18
- return extensionHost.invoke('FileSystem.rename', protocol, oldUri, newUri)
19
- }
20
-
21
- export const getPathSeparator = (extensionHost, protocol) => {
22
- return extensionHost.invoke('FileSystem.getPathSeparator', protocol)
23
- }
@@ -1,4 +0,0 @@
1
- export const format = async (extensionHost, path, content) => {
2
- const formattedContent = await extensionHost.invoke('format', path, content)
3
- return formattedContent
4
- }
@@ -1,12 +0,0 @@
1
- export const executeHoverProvider = async (
2
- extensionHost,
3
- documentId,
4
- offset
5
- ) => {
6
- const hover = await extensionHost.invoke(
7
- 'executeHoverProvider',
8
- documentId,
9
- offset
10
- )
11
- return hover
12
- }
@@ -1,12 +0,0 @@
1
- export const executeImplementationProvider = async (
2
- extensionHost,
3
- documentId,
4
- offset
5
- ) => {
6
- const implementations = await extensionHost.invoke(
7
- 'Implementation.execute',
8
- documentId,
9
- offset
10
- )
11
- return implementations
12
- }
@@ -1,26 +0,0 @@
1
- import * as Debug from '../Debug/Debug.js'
2
-
3
- export const didInstallExtension = (extensionHost, extension) => {
4
- return extensionHost.invoke('didInstallExtension', extension)
5
- }
6
-
7
- export const didUninstallExtension = (extensionHost, extension) => {
8
- return extensionHost.invoke('didUninstallExtension', extension)
9
- }
10
-
11
- export const disableExtension = (extensionHost, extension) => {
12
- return extensionHost.invoke('disableExtension', extension)
13
- }
14
-
15
- // TODO have enableExtensionsCommand to avoid sending too many messages via ipc -> only send one ipc message to enable multiple extensions
16
- export const enableExtension = async (extensionHost, extension) => {
17
- Debug.debug(`ExtensionHost#enableExtension ${extension.id}`)
18
- await extensionHost.invoke('enableExtension', extension)
19
- }
20
-
21
- export const activateAll = async (extensions) => {
22
- // console.log({ extensions })
23
- const results = await Promise.allSettled(extensions.map(enableExtension))
24
- // console.log({ results })
25
- return results
26
- }
@@ -1,3 +0,0 @@
1
- export const getOutputChannels = (extensionHost) => {
2
- return extensionHost.invoke('OutputChannel.getOutputChannels')
3
- }
@@ -1,6 +0,0 @@
1
- export const handleQuickPickResult = (extensionHost, index) => {
2
- return extensionHost.invoke(
3
- 'ExtensionHostQuickPick.handleQuickPickResult',
4
- index
5
- )
6
- }
@@ -1,12 +0,0 @@
1
- export const executeReferenceProvider = async (
2
- extensionHost,
3
- documentId,
4
- offset
5
- ) => {
6
- const references = await extensionHost.invoke(
7
- 'References.execute',
8
- documentId,
9
- offset
10
- )
11
- return references
12
- }
@@ -1,27 +0,0 @@
1
- export const executePrepareRename = async (
2
- extensionHost,
3
- documentId,
4
- offset
5
- ) => {
6
- const result = await extensionHost.invoke(
7
- 'Rename.executePrepareRename',
8
- documentId,
9
- offset
10
- )
11
- return result
12
- }
13
-
14
- export const executeRename = async (
15
- extensionHost,
16
- documentId,
17
- offset,
18
- newName
19
- ) => {
20
- const result = await extensionHost.invoke(
21
- 'Rename.executeRename',
22
- documentId,
23
- offset,
24
- newName
25
- )
26
- return result
27
- }
@@ -1,10 +0,0 @@
1
- export const executeSemanticTokenProvider = async (
2
- extensionHost,
3
- documentId
4
- ) => {
5
- const semanticTokens = await extensionHost.invoke(
6
- 'SemanticTokens.execute',
7
- documentId
8
- )
9
- return semanticTokens
10
- }