Skip to content

Commit fcf063b

Browse files
authored
Merge branch 'main' into codespace-ideal-invention-5rpqgg746xp24pww
2 parents ab4c1e0 + a45cc3c commit fcf063b

1,815 files changed

Lines changed: 131318 additions & 31500 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.devcontainer/devcontainer-lock.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
"resolved": "ghcr.io/devcontainers/features/desktop-lite@sha256:14ac23fd59afab939e6562ba6a1f42a659a805e4c574a1be23b06f28eb3b0b71",
66
"integrity": "sha256:14ac23fd59afab939e6562ba6a1f42a659a805e4c574a1be23b06f28eb3b0b71"
77
},
8-
"ghcr.io/devcontainers/features/rust:1": {
9-
"version": "1.3.3",
10-
"resolved": "ghcr.io/devcontainers/features/rust@sha256:2521a8eeb4911bfcb22557c8394870ea22eb790d8e52219ddc5182f62d388995",
11-
"integrity": "sha256:2521a8eeb4911bfcb22557c8394870ea22eb790d8e52219ddc5182f62d388995"
8+
"ghcr.io/devcontainers/features/rust:": {
9+
"version": "1.5.0",
10+
"resolved": "ghcr.io/devcontainers/features/rust@sha256:0c55e65f2e3df736e478f26ee4d5ed41bae6b54dac1318c443e31444c8ed283c",
11+
"integrity": "sha256:0c55e65f2e3df736e478f26ee4d5ed41bae6b54dac1318c443e31444c8ed283c"
1212
}
1313
}
1414
}

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
},
66
"features": {
77
"ghcr.io/devcontainers/features/desktop-lite:": {},
8-
"ghcr.io/devcontainers/features/rust:1": {}
8+
"ghcr.io/devcontainers/features/rust:": {}
99
},
1010
"containerEnv": {
1111
"DISPLAY": "" // Allow the Dev Containers extension to set DISPLAY, post-create.sh will add it back in ~/.bashrc and ~/.zshrc if not set.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import * as eslint from 'eslint';
7+
8+
/**
9+
* Disallows `declare const enum` declarations. esbuild does not inline
10+
* `declare const enum` values, leaving the enum identifier in the output
11+
* which causes a ReferenceError at runtime.
12+
*
13+
* Use `const enum` (without `declare`) instead.
14+
*
15+
* See https://github.com/evanw/esbuild/issues/4394
16+
*/
17+
export default new class NoDeclareConstEnum implements eslint.Rule.RuleModule {
18+
19+
readonly meta: eslint.Rule.RuleMetaData = {
20+
messages: {
21+
noDeclareConstEnum: '"declare const enum" is not supported by esbuild. Use "const enum" instead. See https://github.com/evanw/esbuild/issues/4394',
22+
},
23+
schema: false,
24+
fixable: 'code',
25+
};
26+
27+
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
28+
return {
29+
TSEnumDeclaration(node: any) {
30+
if (node.const && node.declare) {
31+
context.report({
32+
node,
33+
messageId: 'noDeclareConstEnum',
34+
fix: (fixer) => {
35+
// Remove "declare " from "declare const enum"
36+
const sourceCode = context.sourceCode;
37+
const text = sourceCode.getText(node);
38+
const declareIndex = text.indexOf('declare');
39+
if (declareIndex !== -1) {
40+
return fixer.removeRange([
41+
node.range[0] + declareIndex,
42+
node.range[0] + declareIndex + 'declare '.length
43+
]);
44+
}
45+
return null;
46+
}
47+
});
48+
}
49+
}
50+
};
51+
}
52+
};
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { TSESTree } from '@typescript-eslint/typescript-estree';
7+
import * as eslint from 'eslint';
8+
import { normalize } from 'path';
9+
import minimatch from 'minimatch';
10+
import { createImportRuleListener } from './utils.ts';
11+
12+
const restrictedModules = new Set(['http', 'https']);
13+
14+
const REPO_ROOT = normalize(`${import.meta.dirname}/..`);
15+
16+
export default new class implements eslint.Rule.RuleModule {
17+
18+
readonly meta: eslint.Rule.RuleMetaData = {
19+
messages: {
20+
notAllowed: 'Importing \'{{module}}\' is only allowed as a type import (`import type ...`) to prevent startup performance regressions as these modules are slow to load. Use dynamic `import(\'{{module}}\')` for runtime access.'
21+
},
22+
schema: {
23+
type: 'array',
24+
items: {
25+
type: 'object',
26+
properties: {
27+
target: {
28+
type: 'string',
29+
description: 'A glob pattern for files to check'
30+
}
31+
},
32+
additionalProperties: false,
33+
required: ['target']
34+
}
35+
}
36+
};
37+
38+
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
39+
const targets = (context.options as { target: string }[]).map(o => o.target);
40+
if (targets.length > 0) {
41+
const relativeFilename = normalize(context.getFilename()).substring(REPO_ROOT.length + 1).replace(/\\/g, '/');
42+
const matched = targets.some(pattern => minimatch(relativeFilename, pattern));
43+
if (!matched) {
44+
return {}; // file is not covered by any target pattern
45+
}
46+
}
47+
48+
return createImportRuleListener((node, path) => {
49+
if (!restrictedModules.has(path)) {
50+
return;
51+
}
52+
53+
const parent = node.parent;
54+
if (!parent) {
55+
return;
56+
}
57+
58+
// Allow: import type { ... } from 'http'
59+
// Allow: import type * as http from 'http'
60+
if (parent.type === TSESTree.AST_NODE_TYPES.ImportDeclaration && parent.importKind === 'type') {
61+
return;
62+
}
63+
64+
// Allow: export type { ... } from 'http'
65+
if ('exportKind' in parent && parent.exportKind === 'type') {
66+
return;
67+
}
68+
69+
context.report({
70+
loc: parent.loc,
71+
messageId: 'notAllowed',
72+
data: {
73+
module: path
74+
}
75+
});
76+
});
77+
}
78+
};

.eslint-plugin-local/code-no-native-private.ts

Lines changed: 0 additions & 35 deletions
This file was deleted.

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ ThirdPartyNotices.txt eol=crlf
99
*.sh eol=lf
1010
*.rtf -text
1111
**/*.json linguist-language=jsonc
12+
13+
test/componentFixtures/.screenshots/**/*.png filter=lfs diff=lfs merge=lfs -text

.github/CODENOTIFY

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ src/vs/base/browser/ui/tree/** @joaomoreno @benibenj
2626
# Platform
2727
src/vs/platform/auxiliaryWindow/** @bpasero
2828
src/vs/platform/backup/** @bpasero
29+
src/vs/platform/browserView/** @kycutler @jruales
2930
src/vs/platform/dialogs/** @bpasero
3031
src/vs/platform/editor/** @bpasero
3132
src/vs/platform/environment/** @bpasero
@@ -65,7 +66,7 @@ src/vs/code/** @bpasero @deepak1556
6566
src/vs/workbench/services/activity/** @bpasero
6667
src/vs/workbench/services/authentication/** @TylerLeonhardt
6768
src/vs/workbench/services/auxiliaryWindow/** @bpasero
68-
src/vs/workbench/services/chat/** @bpasero
69+
src/vs/workbench/services/browserView/** @kycutler @jruales
6970
src/vs/workbench/services/contextmenu/** @bpasero
7071
src/vs/workbench/services/dialogs/** @alexr00 @bpasero
7172
src/vs/workbench/services/editor/** @bpasero
@@ -98,17 +99,9 @@ src/vs/workbench/electron-browser/** @bpasero
9899

99100
# Workbench Contributions
100101
src/vs/workbench/contrib/authentication/** @TylerLeonhardt
102+
src/vs/workbench/contrib/browserView/** @kycutler @jruales
101103
src/vs/workbench/contrib/files/** @bpasero
102104
src/vs/workbench/contrib/chat/browser/chatListRenderer.ts @roblourens
103-
src/vs/workbench/contrib/chat/browser/chatSetup/** @bpasero
104-
src/vs/workbench/contrib/chat/browser/chatStatus/** @bpasero
105-
src/vs/workbench/contrib/chat/browser/chatViewPane.ts @bpasero
106-
src/vs/workbench/contrib/chat/browser/media/chatViewPane.css @bpasero
107-
src/vs/workbench/contrib/chat/browser/chatViewTitleControl.ts @bpasero
108-
src/vs/workbench/contrib/chat/browser/media/chatViewTitleControl.css @bpasero
109-
src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.ts @bpasero
110-
src/vs/workbench/contrib/chat/browser/chatManagement/media/chatUsageWidget.css @bpasero
111-
src/vs/workbench/contrib/chat/browser/agentSessions/** @bpasero
112105
src/vs/workbench/contrib/localization/** @TylerLeonhardt
113106
src/vs/workbench/contrib/quickaccess/browser/commandsQuickAccess.ts @TylerLeonhardt
114107
src/vs/workbench/contrib/scm/** @lszomoru

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ build/lib/policies/policyData.jsonc @joshspicer @rebornix @joaomoreno @pwang347
1717
# Ensure the API team is aware of changes to the vscode-dts file
1818
# this is only about the final API, not about proposed API changes
1919
src/vscode-dts/vscode.d.ts @jrieken @mjbvz @alexr00
20+
src/vs/workbench/services/extensions/common/extensionPoints.json @jrieken @mjbvz @alexr00

.github/agents/data.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
---
22
name: Data
33
description: Answer telemetry questions with data queries using Kusto Query Language (KQL)
4-
tools:
5-
['vscode/extensions', 'execute/runInTerminal', 'read/readFile', 'search', 'web/githubRepo', 'azure-mcp/kusto_query', 'todo']
4+
tools: [vscode/extensions, execute/runInTerminal, read/readFile, search, azure-mcp/kusto_query, todo, ms-vscode.kusto-client/kusto, ms-vscode.kusto-client/kustoQueryExecution]
65
---
76

87
# Role and Objective
@@ -14,7 +13,9 @@ You are a Azure Data Explorer data analyst with expert knowledge in Kusto Query
1413
1. Read `vscode-telemetry-docs/.github/copilot-instructions.md` to understand how to access VS Code's telemetry
1514
- If the `vscode-telemetry-docs` folder doesn't exist (just check your workspace_info, no extra tool call needed), run `npm run mixin-telemetry-docs` to clone the telemetry documentation.
1615
2. Analyze data using kusto queries: Don't just describe what could be queried - actually execute Kusto queries to provide real data and insights:
17-
- If the `kusto_query` tool doesn't exist (just check your provided tools, no need to run it!), install the `ms-azuretools.vscode-azure-mcp-server` VS Code extension
16+
- You need either the **Kusto Explorer** extension (`ms-vscode.kusto-client`) or the **Azure MCP** extension (`ms-azuretools.vscode-azure-mcp-server`) installed to run queries.
17+
- **Prefer Kusto Explorer** (`kusto_runQuery` / `kusto_checkQueryExecution` tools) over Azure MCP (`kusto_query` tool) when both are available.
18+
- If neither tool is available (just check your provided tools, no need to run them!), install the Kusto Explorer extension (`ms-vscode.kusto-client`). If that is not an option, fall back to installing the Azure MCP extension (`ms-azuretools.vscode-azure-mcp-server`).
1819
- Use the appropriate Kusto cluster and database for the data type
1920
- Always include proper time filtering to limit data volume
2021
- Default to a rolling 28-day window if no specific timeframe is requested
@@ -41,3 +42,7 @@ Your response should include:
4142
- Interpretation and analysis of the results
4243
- References to specific documentation files when applicable
4344
- Additional context or insights from the telemetry data
45+
46+
# Troubleshooting
47+
48+
If the connection to the Kusto cluster is timing out consistently, stop and ask the user to check whether they are connected to Azure VPN.

.github/copilot-instructions.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ function f(x: number, y: string): void { }
140140
- Do not duplicate code. Always look for existing utility functions, helpers, or patterns in the codebase before implementing new functionality. Reuse and extend existing code whenever possible.
141141
- You MUST deal with disposables by registering them immediately after creation for later disposal. Use helpers such as `DisposableStore`, `MutableDisposable` or `DisposableMap`. Do NOT register a disposable to the containing class if the object is created within a method that is called repeadedly to avoid leaks. Instead, return a `IDisposable` from such method and let the caller register it.
142142
- You MUST NOT use storage keys of another component only to make changes to that component. You MUST come up with proper API to change another component.
143+
- Use `IEditorService` to open editors instead of `IEditorGroupsService.activeGroup.openEditor` to ensure that the editor opening logic is properly followed and to avoid bypassing important features such as `revealIfOpened` or `preserveFocus`.
144+
- Avoid using `bind()`, `call()` and `apply()` solely to control `this` or partially apply arguments; prefer arrow functions or closures to capture the necessary context, and use these methods only when required by an API or interoperability.
143145

144146
## Learnings
145147
- Minimize the amount of assertions in tests. Prefer one snapshot-style `assert.deepStrictEqual` over multiple precise assertions, as they are much more difficult to understand and to update.

0 commit comments

Comments
 (0)