config: fix nested config resolution strings not getting resolved sometimes

See https://github.com/microsoft/vscode/issues/245798#issuecomment-2871753176

Fixes #245798
This commit is contained in:
Connor Peet
2025-05-12 06:22:27 -07:00
parent d289985e85
commit a8b2e1edcc
2 changed files with 29 additions and 1 deletions

View File

@@ -283,8 +283,8 @@ export class ConfigurationResolverExpression<T> implements IConfigurationResolve
object[newKey] = value;
this.parseString(object, newKey, data.value, true, path);
} else {
this.parseString(object, propertyName, data.value, false, path);
object[propertyName] = object[propertyName].replaceAll(replacement.id, data.value);
this.parseString(object, propertyName, data.value, false, path);
}
path.pop();

View File

@@ -1010,4 +1010,32 @@ suite('ConfigurationResolverExpression', () => {
'key that is username: testuser': 'cool!'
});
});
test('resolves nested values 2 (#245798)', () => {
const expr = ConfigurationResolverExpression.parse({
env: {
SITE: "${input:site}",
TLD: "${input:tld}",
HOST: "${input:host}",
},
});
for (const r of expr.unresolved()) {
if (r.arg === 'site') {
expr.resolve(r, 'example');
} else if (r.arg === 'tld') {
expr.resolve(r, 'com');
} else if (r.arg === 'host') {
expr.resolve(r, 'local.${input:site}.${input:tld}');
}
}
assert.deepStrictEqual(expr.toObject(), {
env: {
SITE: 'example',
TLD: 'com',
HOST: 'local.example.com'
}
});
});
});