Skip to content

Commit de2d9e5

Browse files
committed
feat: use theme service override
1 parent d2f8754 commit de2d9e5

File tree

6 files changed

+52
-253
lines changed

6 files changed

+52
-253
lines changed

src/configuration/index.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,23 @@ configurationRegistry.registerDefaultConfigurations([{
1111
'editor.fontSize': 12,
1212
'editor.maxTokenizationLineLength': 1000,
1313
'editor.quickSuggestions': false,
14-
'files.eol': '\n'
14+
'files.eol': '\n',
15+
'editor.semanticTokenColorCustomizations': {
16+
rules: {
17+
'*.static': {
18+
fontStyle: 'italic'
19+
},
20+
'*.final.static': {
21+
fontStyle: 'italic bold'
22+
},
23+
'*.readonly': {
24+
fontStyle: 'bold'
25+
},
26+
'*.deprecated': {
27+
fontStyle: 'strikethrough'
28+
}
29+
}
30+
}
1531
}
1632
}])
1733

src/monaco.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import * as monaco from 'monaco-editor'
22
import './languages'
33
import './theme'
4+
import { StandaloneServices, ITextModelService, ITextModelContentProvider } from 'vscode/services'
45
import getModelEditorServiceOverride from 'vscode/service-override/modelEditor'
56
import getMessageServiceOverride from 'vscode/service-override/messages'
67
import getConfigurationServiceOverride from 'vscode/service-override/configuration'
8+
import getThemeServiceOverride from 'vscode/service-override/theme'
79
import './worker'
810
import { createConfiguredEditor, errorHandler } from 'vscode/monaco'
911
import setupExtensions from './extensions'
@@ -25,7 +27,8 @@ StandaloneServices.initialize({
2527
return editorOpenHandlerRegistry.openCodeEditor(model, input, sideBySide)
2628
}),
2729
...getMessageServiceOverride(document.body),
28-
...getConfigurationServiceOverride()
30+
...getConfigurationServiceOverride(),
31+
...getThemeServiceOverride()
2932
})
3033
// Disable high contrast autodetection because it fallbacks on the hc-black no matter what
3134
setTimeout(() => {

src/theme/index.ts

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,45 @@
1-
import * as monaco from 'monaco-editor'
2-
import { defineVSCodeTheme } from './registry'
3-
import './semanticHighlight'
4-
import { IVSCodeTheme } from './tools'
1+
import { setThemes, setDefaultThemes, IThemeExtensionPoint } from 'vscode/service-override/theme'
2+
import { Disposable } from 'vscode'
53
import defaultThemes from '../languages/extensions/themes.json'
64
import themeLoader from '../languages/extensions/themeLoader'
75

8-
const DEFAULT_VSCODE_THEMES: Partial<Record<string, monaco.editor.BuiltinTheme>> = {
9-
'Default Light+': 'vs',
10-
'Default Dark+': 'vs-dark',
11-
'Default High Contrast': 'hc-black'
12-
// 'Default High Contrast Light': 'hc-white' // FIXME: Uncomment me with monaco 0.34 which support hc-light theme
6+
interface DefaultTheme extends IThemeExtensionPoint {
7+
extension: string
138
}
14-
// FIXME: Remove me with monaco 0.34 which support hc-light theme
15-
const VSCODE_THEME_BLACKLIST = new Set(['Default High Contrast Light'])
169

17-
function generateMonacoThemeId (vsCodeThemeId: string) {
18-
return vsCodeThemeId.replace(/ /g, '-').toLowerCase().replace(/[^a-z0-9-]/g, '')
10+
interface VSCodeTheme extends IThemeExtensionPoint {
11+
load: () => Promise<string>
1912
}
2013

21-
interface VSCodeTheme extends Omit<monaco.extra.IThemeExtensionPoint, '_watch'> {
22-
extension: string
14+
setDefaultThemes((defaultThemes as DefaultTheme[]).map(themeExtensionPoint => ({
15+
...themeExtensionPoint,
16+
load: async () => JSON.stringify(await themeLoader[`${themeExtensionPoint.extension}:${themeExtensionPoint.path.slice(1)}`]!())
17+
})), async (themeExtensionPoint) => themeExtensionPoint.load())
18+
19+
let themes: VSCodeTheme[] = []
20+
function updateThemes () {
21+
setThemes(themes, async (themeExtensionPoint) => themeExtensionPoint.load())
2322
}
23+
updateThemes()
2424

25-
for (const themeExtensionPoint of (defaultThemes as VSCodeTheme[])) {
26-
if (VSCODE_THEME_BLACKLIST.has(themeExtensionPoint.id)) {
27-
continue
25+
function defineVSCodeTheme (id: string, load: () => Promise<string>): Disposable {
26+
const theme: VSCodeTheme = {
27+
id,
28+
path: `/${id}.json`,
29+
load,
30+
_watch: false
2831
}
29-
const loader = async (uri?: monaco.Uri): Promise<IVSCodeTheme> => {
30-
return themeLoader[`${themeExtensionPoint.extension}:${uri?.path ?? themeExtensionPoint.path.slice(1)}`]!()
32+
themes = [
33+
...themes,
34+
theme
35+
]
36+
updateThemes()
37+
return {
38+
dispose () {
39+
themes = themes.filter(_theme => _theme !== theme)
40+
updateThemes()
41+
}
3142
}
32-
33-
const monacoThemeId = DEFAULT_VSCODE_THEMES[themeExtensionPoint.id] ?? generateMonacoThemeId(themeExtensionPoint.id)
34-
defineVSCodeTheme(monacoThemeId, loader, themeExtensionPoint, {
35-
extensionName: themeExtensionPoint.extension,
36-
extensionIsBuiltin: true
37-
}).catch((error: Error) => {
38-
monaco.errorHandler.onUnexpectedError(new Error(`Unable to define "${themeExtensionPoint.id}" vscode theme`, {
39-
cause: error
40-
}))
41-
})
4243
}
4344

4445
export {

src/theme/registry.ts

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

src/theme/semanticHighlight.ts

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

src/theme/tools.ts

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

0 commit comments

Comments
 (0)