Skip to content

Commit e8773cf

Browse files
committed
wip
1 parent 377399c commit e8773cf

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

src/extension.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import onCompletionAccepted from './onCompletionAccepted'
1515
import specialCommands from './specialCommands'
1616
import vueVolarSupport from './vueVolarSupport'
1717
import moreCompletions from './moreCompletions'
18+
import { mergeSettingsFromScopes } from './mergeSettings'
1819

1920
let isActivated = false
2021
// let erroredStatusBarItem: vscode.StatusBarItem | undefined
@@ -28,6 +29,7 @@ export const activateTsPlugin = (tsApi: { configurePlugin; onCompletionAccepted
2829
if (!tsApi) return
2930
console.log('sending configure request for typescript-essential-plugins')
3031
const config: any = vscode.workspace.getConfiguration().get(process.env.IDS_PREFIX!)
32+
mergeSettingsFromScopes(config, 'typescript', extensionCtx.extension.packageJSON)
3133

3234
tsApi.configurePlugin('typescript-essential-plugins', config)
3335

src/mergeSettings.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import * as vscode from 'vscode'
2+
import lodash from 'lodash'
3+
import { Configuration } from './configurationType'
4+
5+
const settingsToIgnore = [] as Array<keyof Configuration>
6+
7+
export const mergeSettingsFromScopes = (
8+
settings: Record<string, any>,
9+
language: string,
10+
packageJson: { contributes: { configuration: { properties: Record<string, any> } } },
11+
) => {
12+
const {
13+
contributes: {
14+
configuration: { properties },
15+
},
16+
} = packageJson
17+
for (const [key, item] of Object.entries(properties)) {
18+
const isObject = item.type !== 'object'
19+
if ((isObject && item.type !== 'array') || settingsToIgnore.includes(key as keyof Configuration)) {
20+
continue
21+
}
22+
23+
const value = getConfigValueFromAllScopes(key as keyof Configuration, language, isObject ? 'object' : 'array')
24+
lodash.set(settings, key, value)
25+
}
26+
}
27+
28+
const getConfigValueFromAllScopes = <T extends keyof Configuration>(configKey: T, language: string, type: 'array' | 'object'): Configuration[T] => {
29+
const values = { ...vscode.workspace.getConfiguration(process.env.IDS_PREFIX, { languageId: language }).inspect<any[]>(configKey)! }
30+
const userValueKeys = Object.keys(values).filter(key => key.endsWith('Value') && !key.startsWith('default'))
31+
console.log(userValueKeys)
32+
for (const key of userValueKeys) {
33+
if (values[key] !== undefined) {
34+
continue
35+
}
36+
37+
values[key] = type === 'array' ? [] : {}
38+
}
39+
40+
return type === 'array' ? userValueKeys.flatMap(key => values[key]) : Object.assign({}, ...userValueKeys.map(key => values[key]))
41+
}

typescript/src/volarConfig.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ const plugin = (context => {
2121
// todo support vue-specific settings
2222
const originalLsMethods = { ...typescript.languageService }
2323

24+
configurationHost.getConfiguration<any>('[vue]').then(_configuration => {
25+
console.log('_configuration', _configuration)
26+
})
2427
configurationHost.getConfiguration<any>('tsEssentialPlugins').then(_configuration => {
2528
// if (typescript.languageService[thisPluginMarker]) return
2629
const config = patchConfig(_configuration)

0 commit comments

Comments
 (0)