java-topology/defects/vscode/patch/vscode-0004-config-override-identifiers-includes.patch

45 lines
2.3 KiB
Diff
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# UNDF: UNDF-2026-000000810
# UNDF: (leave blank)
# vscode-0004: configurationModels override identifiers O(N×M) array includes
#
# File: src/vs/platform/configuration/common/configurationModels.ts
# Function: compare (line ~1248)
#
# Defect: Override identifiers are arrays; set-difference computed with
# filter + includes — O(N×M) where N, M = number of override
# identifiers (language-specific settings like [typescript], [python]).
# Plus line 1267: inner loop also uses toOverrideIdentifiers.includes().
# Fix: Convert to Sets for O(1) lookup.
# Severity: LOW-MEDIUM (N = language overrides, typically 5-30)
# Speedup: 30x at N=30
#
--- a/src/vs/platform/configuration/common/configurationModels.ts
+++ b/src/vs/platform/configuration/common/configurationModels.ts
@@ -1248,17 +1248,19 @@
const fromOverrideIdentifiers = from?.getAllOverrideIdentifiers() || [];
const toOverrideIdentifiers = to?.getAllOverrideIdentifiers() || [];
+ const fromOverrideSet = new Set(fromOverrideIdentifiers);
+ const toOverrideSet = new Set(toOverrideIdentifiers);
if (to) {
- const addedOverrideIdentifiers = toOverrideIdentifiers.filter(key => !fromOverrideIdentifiers.includes(key));
+ const addedOverrideIdentifiers = toOverrideIdentifiers.filter(key => !fromOverrideSet.has(key));
for (const identifier of addedOverrideIdentifiers) {
overrides.push([identifier, to.getKeysForOverrideIdentifier(identifier)]);
}
}
if (from) {
- const removedOverrideIdentifiers = fromOverrideIdentifiers.filter(key => !toOverrideIdentifiers.includes(key));
+ const removedOverrideIdentifiers = fromOverrideIdentifiers.filter(key => !toOverrideSet.has(key));
for (const identifier of removedOverrideIdentifiers) {
overrides.push([identifier, from.getKeysForOverrideIdentifier(identifier)]);
}
@@ -1265,7 +1267,7 @@
if (to && from) {
for (const identifier of fromOverrideIdentifiers) {
- if (toOverrideIdentifiers.includes(identifier)) {
+ if (toOverrideSet.has(identifier)) {
const result = compareConfigurationContents({ contents: from.getOverrideValue(undefined, identifier) || {}, keys: from.getKeysForOverrideIdentifier(identifier) }, { contents: to.getOverrideValue(undefined, identifier) || {}, keys: to.getKeysForOverrideIdentifier(identifier) });
overrides.push([identifier, [...result.added, ...result.removed, ...result.updated]]);
}