Implement remaining resolver methods
This commit is contained in:
parent
8ffe599796
commit
fa59156a2a
|
@ -1466,10 +1466,10 @@ index 0000000000000000000000000000000000000000..6ce56bec114a6d8daf5dd3ded945ea78
|
||||||
+}
|
+}
|
||||||
diff --git a/src/vs/server/node/channel.ts b/src/vs/server/node/channel.ts
|
diff --git a/src/vs/server/node/channel.ts b/src/vs/server/node/channel.ts
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..7081bbf178c660803830675a4d8d596c5d0b7821
|
index 0000000000000000000000000000000000000000..7619b02f04b6e61e86e741b09b542d86fab97e3d
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/vs/server/node/channel.ts
|
+++ b/src/vs/server/node/channel.ts
|
||||||
@@ -0,0 +1,869 @@
|
@@ -0,0 +1,887 @@
|
||||||
+import { field, logger } from '@coder/logger';
|
+import { field, logger } from '@coder/logger';
|
||||||
+import { Server } from '@coder/node-browser';
|
+import { Server } from '@coder/node-browser';
|
||||||
+import * as os from 'os';
|
+import * as os from 'os';
|
||||||
|
@ -1846,30 +1846,51 @@ index 0000000000000000000000000000000000000000..7081bbf178c660803830675a4d8d596c
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+class VariableResolverService extends AbstractVariableResolverService {
|
+class VariableResolverService extends AbstractVariableResolverService {
|
||||||
+ constructor(folders: terminal.IWorkspaceFolderData[], env: platform.IProcessEnvironment) {
|
+ constructor(
|
||||||
|
+ remoteAuthority: string,
|
||||||
|
+ args: terminal.ICreateTerminalProcessArguments,
|
||||||
|
+ env: platform.IProcessEnvironment,
|
||||||
|
+ ) {
|
||||||
+ super({
|
+ super({
|
||||||
+ getFolderUri: (name: string): URI | undefined => {
|
+ getFolderUri: (name: string): URI | undefined => {
|
||||||
+ const folder = folders.find((f) => f.name === name);
|
+ const folder = args.workspaceFolders.find((f) => f.name === name);
|
||||||
+ return folder && URI.revive(folder.uri);
|
+ return folder && URI.revive(folder.uri);
|
||||||
+ },
|
+ },
|
||||||
+ getWorkspaceFolderCount: (): number => {
|
+ getWorkspaceFolderCount: (): number => {
|
||||||
+ return folders.length;
|
+ return args.workspaceFolders.length;
|
||||||
+ },
|
+ },
|
||||||
+ getConfigurationValue: (uri: URI, section: string): string | undefined => {
|
+ // In ../../workbench/contrib/terminal/common/remoteTerminalChannel.ts it
|
||||||
+ throw new Error("not implemented");
|
+ // looks like there are `config:` entries which must be for this? Not sure
|
||||||
|
+ // how/if the URI comes into play though.
|
||||||
|
+ getConfigurationValue: (_: URI, section: string): string | undefined => {
|
||||||
|
+ return args.resolvedVariables[`config:${section}`];
|
||||||
+ },
|
+ },
|
||||||
+ getExecPath: (): string | undefined => {
|
+ getExecPath: (): string | undefined => {
|
||||||
+ return env['VSCODE_EXEC_PATH'];
|
+ return env['VSCODE_EXEC_PATH'];
|
||||||
+ },
|
+ },
|
||||||
|
+ // This is just a guess; this is the only file-related thing we're sent
|
||||||
|
+ // and none of these resolver methods seem to get called so I don't know
|
||||||
|
+ // how to test.
|
||||||
+ getFilePath: (): string | undefined => {
|
+ getFilePath: (): string | undefined => {
|
||||||
+ throw new Error("not implemented");
|
+ const resource = transformIncoming(remoteAuthority, args.activeFileResource);
|
||||||
|
+ if (!resource) {
|
||||||
|
+ return undefined;
|
||||||
|
+ }
|
||||||
|
+ // See ../../editor/standalone/browser/simpleServices.ts;
|
||||||
|
+ // `BaseConfigurationResolverService` calls `getUriLabel` from there.
|
||||||
|
+ if (resource.scheme === 'file') {
|
||||||
|
+ return resource.fsPath;
|
||||||
|
+ }
|
||||||
|
+ return resource.path;
|
||||||
+ },
|
+ },
|
||||||
|
+ // It looks like these are set here although they aren't on the types:
|
||||||
|
+ // ../../workbench/contrib/terminal/common/remoteTerminalChannel.ts
|
||||||
+ getSelectedText: (): string | undefined => {
|
+ getSelectedText: (): string | undefined => {
|
||||||
+ throw new Error("not implemented");
|
+ return args.resolvedVariables.selectedText;
|
||||||
+ },
|
+ },
|
||||||
+ getLineNumber: (): string | undefined => {
|
+ getLineNumber: (): string | undefined => {
|
||||||
+ throw new Error("not implemented");
|
+ return args.resolvedVariables.selectedText;
|
||||||
+ }
|
+ },
|
||||||
+ }, undefined, env);
|
+ }, undefined, env);
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
|
@ -2144,20 +2165,22 @@ index 0000000000000000000000000000000000000000..7081bbf178c660803830675a4d8d596c
|
||||||
+ name: args.shellLaunchConfig.name,
|
+ name: args.shellLaunchConfig.name,
|
||||||
+ executable: args.shellLaunchConfig.executable,
|
+ executable: args.shellLaunchConfig.executable,
|
||||||
+ args: args.shellLaunchConfig.args,
|
+ args: args.shellLaunchConfig.args,
|
||||||
+ cwd: this.transform(remoteAuthority, args.shellLaunchConfig.cwd),
|
+ // TODO: Should we transform if it's a string as well? The incoming
|
||||||
|
+ // transform only takes `UriComponents` so I suspect it's not necessary.
|
||||||
|
+ cwd: typeof args.shellLaunchConfig.cwd !== "string"
|
||||||
|
+ ? transformIncoming(remoteAuthority, args.shellLaunchConfig.cwd)
|
||||||
|
+ : args.shellLaunchConfig.cwd,
|
||||||
+ env: args.shellLaunchConfig.env,
|
+ env: args.shellLaunchConfig.env,
|
||||||
+ };
|
+ };
|
||||||
+
|
+
|
||||||
+ // TODO: is this supposed to be the *last* workspace?
|
+ const activeWorkspaceUri = transformIncoming(remoteAuthority, args.activeWorkspaceFolder?.uri);
|
||||||
+
|
|
||||||
+ const activeWorkspaceUri = this.transform(remoteAuthority, args.activeWorkspaceFolder?.uri);
|
|
||||||
+ const activeWorkspace = activeWorkspaceUri && args.activeWorkspaceFolder ? {
|
+ const activeWorkspace = activeWorkspaceUri && args.activeWorkspaceFolder ? {
|
||||||
+ ...args.activeWorkspaceFolder,
|
+ ...args.activeWorkspaceFolder,
|
||||||
+ uri: activeWorkspaceUri,
|
+ uri: activeWorkspaceUri,
|
||||||
+ toResource: (relativePath: string) => resources.joinPath(activeWorkspaceUri, relativePath),
|
+ toResource: (relativePath: string) => resources.joinPath(activeWorkspaceUri, relativePath),
|
||||||
+ } : undefined;
|
+ } : undefined;
|
||||||
+
|
+
|
||||||
+ const resolverService = new VariableResolverService(args.workspaceFolders, process.env as platform.IProcessEnvironment);
|
+ const resolverService = new VariableResolverService(remoteAuthority, args, process.env as platform.IProcessEnvironment);
|
||||||
+ const resolver = terminalEnvironment.createVariableResolver(activeWorkspace, resolverService);
|
+ const resolver = terminalEnvironment.createVariableResolver(activeWorkspace, resolverService);
|
||||||
+
|
+
|
||||||
+ const getDefaultShellAndArgs = (): { executable: string; args: string[] | string } => {
|
+ const getDefaultShellAndArgs = (): { executable: string; args: string[] | string } => {
|
||||||
|
@ -2269,16 +2292,6 @@ index 0000000000000000000000000000000000000000..7081bbf178c660803830675a4d8d596c
|
||||||
+ };
|
+ };
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ private transform(remoteAuthority: string, uri: UriComponents | undefined): URI | undefined
|
|
||||||
+ private transform(remoteAuthority: string, uri: string | UriComponents | undefined): string | URI | undefined
|
|
||||||
+ private transform(remoteAuthority: string, uri: string | UriComponents | undefined): string | URI | undefined {
|
|
||||||
+ if (typeof uri === 'string') {
|
|
||||||
+ return uri;
|
|
||||||
+ }
|
|
||||||
+ const transformer = getUriTransformer(remoteAuthority);
|
|
||||||
+ return uri ? URI.revive(transformer.transformIncoming(uri)) : uri;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private getTerminal(id: number): Terminal {
|
+ private getTerminal(id: number): Terminal {
|
||||||
+ const terminal = this.terminals.get(id);
|
+ const terminal = this.terminals.get(id);
|
||||||
+ if (!terminal) {
|
+ if (!terminal) {
|
||||||
|
@ -2339,6 +2352,11 @@ index 0000000000000000000000000000000000000000..7081bbf178c660803830675a4d8d596c
|
||||||
+ }));
|
+ }));
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
|
+function transformIncoming(remoteAuthority: string, uri: UriComponents | undefined): URI | undefined {
|
||||||
|
+ const transformer = getUriTransformer(remoteAuthority);
|
||||||
|
+ return uri ? URI.revive(transformer.transformIncoming(uri)) : uri;
|
||||||
|
+}
|
||||||
diff --git a/src/vs/server/node/connection.ts b/src/vs/server/node/connection.ts
|
diff --git a/src/vs/server/node/connection.ts b/src/vs/server/node/connection.ts
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..93062cadc627c61e0829c27a72894b81e6a0e039
|
index 0000000000000000000000000000000000000000..93062cadc627c61e0829c27a72894b81e6a0e039
|
||||||
|
|
Loading…
Reference in New Issue