mirror of
https://github.com/microsoft/vscode.git
synced 2026-06-29 19:06:00 +01:00
27725b9a63
* sessions: resolve ${workspaceFolder} in agent-host tasks via IConfigurationResolverService
Agent-host worktree sessions build their task command line through
AgentHostSessionTaskRunner/resolveTaskCommand, which bypassed variable
resolution and sent ${workspaceFolder} to the terminal verbatim (causing
EROFS errors writing to a literal "${workspaceFolder}" path).
Expand variables using the workbench IConfigurationResolverService (already
registered in the Agents window), passing the session's worktree folder so
${workspaceFolder} resolves to the worktree rather than the Agents window's
own workspace. The resolver API is async, so the resolveTaskCommand pipeline
is now async; the hook is attached only when a cwd is known so variables are
left untouched otherwise.
Also adds the Agents-window worktree dev tasks (Install & Watch Client,
Run Client, Install & Watch) to .vscode/tasks.json, and tightens the
over-commenting guidance in the coding guidelines and sessions skill.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: address CCR feedback on agent-host variable resolution
- Resolve ${workspaceFolder} for remote hosts using the POSIX URI path
instead of IConfigurationResolverService.resolveAsync (whose fsPath uses
renderer-OS separators, wrong for a differently-OS'd remote host).
- Wrap the local resolveAsync call in try/catch so an unresolvable variable
(e.g. ${command:}/${input:}) leaves the string unchanged rather than
failing task dispatch.
- Fix the _getCwd comment to reference the real scheme (vscode-agent-host).
- Add a remote-host test asserting POSIX-path expansion and that the
renderer resolver is not consulted.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: make agent-host task runner test platform-independent
The expansion test asserted against the resolver substituting URI.fsPath,
which on Windows yields backslash separators. Backslash is in
POSIX_NEEDS_QUOTING, so the expanded arg was strong-quoted on Windows and
the unquoted assertion failed. Substitute the POSIX URI path instead so the
test is deterministic across platforms.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
4.1 KiB
4.1 KiB
description, applyTo
| description | applyTo |
|---|---|
| VS Code coding guidelines — naming, style, types, strings, and code quality rules. Reference when writing or reviewing code. | src/vs/** |
Coding Guidelines
Canonical reference: https://github.com/microsoft/vscode/wiki/Coding-Guidelines
Also see the Source Code Organization wiki page.
Indentation
Use tabs, not spaces.
Naming
- PascalCase for types and enum values
- camelCase for functions, methods, properties, and local variables
- Use whole words when possible
Types
- Do not export types or functions unless shared across multiple components
- Do not introduce new types or values to the global namespace
Comments
- Use JSDoc style comments for functions, interfaces, enums, and classes
- Do not write large comments in the middle of a method or comments that explain a single line. If a line or block needs a paragraph of explanation to be understood, treat that as a signal that the code itself is unclear: extract a well-named function, introduce an explanatory variable, or simplify the logic instead. Keep any remaining inline comment to a brief note.
- Default to NO comment. Add one only when the code cannot be made self-explanatory by naming. Code that is obvious from its identifiers must not be commented.
- Hard limits (treat as rules, not suggestions):
- JSDoc on a function/interface/property: at most 1–2 short sentences. Do not enumerate every branch/feature, restate the signature, list what it does NOT do, or explain parameters that are obvious from their names/types.
- Inline comment inside a method body: at most 1 line, and only for a genuine workaround/hack, a non-obvious ordering constraint, or a surprising side effect. Never narrate the next statement (e.g.
// Expand the variable,// loop over args).
- Before writing any comment longer than one line, stop and either delete it or shorten it to a single line. A multi-line block comment inside a method body is almost always wrong.
Strings
"double quotes"for user-visible strings that need localization'single quotes'for everything else- All user-visible strings must be externalized via
nls.localize()— no string concatenation, use{0}placeholders
UI Labels
- Title case for command labels, buttons, and menu items (each major word capitalized)
- Don't capitalize prepositions of four or fewer letters unless first or last word
- Sentence case for view titles/headings (only first word capitalized), no trailing period
Style
- Arrow functions over anonymous function expressions
- Only parenthesize arrow parameters when necessary:
x => x + xnot(x) => x + x - Always surround loop and conditional bodies with curly braces
- Open curly braces on the same line
- No surrounding whitespace in parenthesized constructs
- Prefer
export function x(…) {…}overexport const x = (…) => {…}at top-level scope (better stack traces)
Code Quality
- Include Microsoft copyright header in all files
- Prefer
async/awaitoverPromise.then() - Localize all user-facing messages
- Prefer named regex capture groups over numbered ones
- Do not use
anyorunknownunless absolutely necessary - Register disposables immediately after creation — use
DisposableStore,MutableDisposable, orthis._register() - Declare service dependencies in constructors via DI — never access services through
IInstantiationServiceelsewhere. In particular, do not lazily resolve a service withthis.instantiationService.invokeFunction(accessor => accessor.get(ISomeService)); add@ISomeServiceas a constructor parameter instead. If a constructor cycle prevents direct injection, break the cycle (e.g. pass the dependency into aninit()/wiring method from the orchestrator, or relocate the call) rather than reaching throughinvokeFunction/accessor.get. - Use
IEditorServiceto open editors, notIEditorGroupsService.activeGroup.openEditor - Avoid
bind()/call()/apply()solely forthis— prefer arrow functions - Avoid events for control flow between components — prefer direct method calls