mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-21 17:54:23 +01:00
578 lines
14 KiB
TypeScript
578 lines
14 KiB
TypeScript
import { createSimpleContext } from "./helper"
|
|
import { createHighlighter, type ThemeInput } from "shiki"
|
|
|
|
const theme: ThemeInput = {
|
|
colors: {
|
|
"actionBar.toggledBackground": "var(--surface-raised-base)",
|
|
"activityBarBadge.background": "var(--surface-brand-base)",
|
|
"checkbox.border": "var(--border-base)",
|
|
"editor.background": "transparent",
|
|
"editor.foreground": "var(--text-base)",
|
|
"editor.inactiveSelectionBackground": "var(--surface-raised-base)",
|
|
"editor.selectionHighlightBackground": "var(--border-active)",
|
|
"editorIndentGuide.activeBackground1": "var(--border-weak-base)",
|
|
"editorIndentGuide.background1": "var(--border-weak-base)",
|
|
"input.placeholderForeground": "var(--text-weak)",
|
|
"list.activeSelectionIconForeground": "var(--text-base)",
|
|
"list.dropBackground": "var(--surface-raised-base)",
|
|
"menu.background": "var(--surface-base)",
|
|
"menu.border": "var(--border-base)",
|
|
"menu.foreground": "var(--text-base)",
|
|
"menu.selectionBackground": "var(--surface-interactive-base)",
|
|
"menu.separatorBackground": "var(--border-base)",
|
|
"ports.iconRunningProcessForeground": "var(--icon-success-base)",
|
|
"sideBarSectionHeader.background": "transparent",
|
|
"sideBarSectionHeader.border": "var(--border-weak-base)",
|
|
"sideBarTitle.foreground": "var(--text-weak)",
|
|
"statusBarItem.remoteBackground": "var(--surface-success-base)",
|
|
"statusBarItem.remoteForeground": "var(--text-base)",
|
|
"tab.lastPinnedBorder": "var(--border-weak-base)",
|
|
"tab.selectedBackground": "var(--surface-raised-base)",
|
|
"tab.selectedForeground": "var(--text-weak)",
|
|
"terminal.inactiveSelectionBackground": "var(--surface-raised-base)",
|
|
"widget.border": "var(--border-base)",
|
|
},
|
|
displayName: "opencode",
|
|
name: "opencode",
|
|
semanticHighlighting: true,
|
|
semanticTokenColors: {
|
|
customLiteral: "var(--syntax-function)",
|
|
newOperator: "var(--syntax-operator)",
|
|
numberLiteral: "var(--syntax-number)",
|
|
stringLiteral: "var(--syntax-string)",
|
|
},
|
|
tokenColors: [
|
|
{
|
|
scope: [
|
|
"meta.embedded",
|
|
"source.groovy.embedded",
|
|
"string meta.image.inline.markdown",
|
|
"variable.legacy.builtin.python",
|
|
],
|
|
settings: {
|
|
foreground: "var(--text-base)",
|
|
},
|
|
},
|
|
{
|
|
scope: "emphasis",
|
|
settings: {
|
|
fontStyle: "italic",
|
|
},
|
|
},
|
|
{
|
|
scope: "strong",
|
|
settings: {
|
|
fontStyle: "bold",
|
|
},
|
|
},
|
|
{
|
|
scope: "header",
|
|
settings: {
|
|
foreground: "var(--markdown-heading)",
|
|
},
|
|
},
|
|
{
|
|
scope: "comment",
|
|
settings: {
|
|
foreground: "var(--syntax-comment)",
|
|
},
|
|
},
|
|
{
|
|
scope: "constant.language",
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"constant.numeric",
|
|
"variable.other.enummember",
|
|
"keyword.operator.plus.exponent",
|
|
"keyword.operator.minus.exponent",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-number)",
|
|
},
|
|
},
|
|
{
|
|
scope: "constant.regexp",
|
|
settings: {
|
|
foreground: "var(--syntax-operator)",
|
|
},
|
|
},
|
|
{
|
|
scope: "entity.name.tag",
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: ["entity.name.tag.css", "entity.name.tag.less"],
|
|
settings: {
|
|
foreground: "var(--syntax-operator)",
|
|
},
|
|
},
|
|
{
|
|
scope: "entity.other.attribute-name",
|
|
settings: {
|
|
foreground: "var(--syntax-variable)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"entity.other.attribute-name.class.css",
|
|
"source.css entity.other.attribute-name.class",
|
|
"entity.other.attribute-name.id.css",
|
|
"entity.other.attribute-name.parent-selector.css",
|
|
"entity.other.attribute-name.parent.less",
|
|
"source.css entity.other.attribute-name.pseudo-class",
|
|
"entity.other.attribute-name.pseudo-element.css",
|
|
"source.css.less entity.other.attribute-name.id",
|
|
"entity.other.attribute-name.scss",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-operator)",
|
|
},
|
|
},
|
|
{
|
|
scope: "invalid",
|
|
settings: {
|
|
foreground: "var(--syntax-critical)",
|
|
},
|
|
},
|
|
{
|
|
scope: "markup.underline",
|
|
settings: {
|
|
fontStyle: "underline",
|
|
},
|
|
},
|
|
{
|
|
scope: "markup.bold",
|
|
settings: {
|
|
fontStyle: "bold",
|
|
foreground: "var(--markdown-strong)",
|
|
},
|
|
},
|
|
{
|
|
scope: "markup.heading",
|
|
settings: {
|
|
fontStyle: "bold",
|
|
foreground: "var(--theme-markdown-heading)",
|
|
},
|
|
},
|
|
{
|
|
scope: "markup.italic",
|
|
settings: {
|
|
fontStyle: "italic",
|
|
},
|
|
},
|
|
{
|
|
scope: "markup.strikethrough",
|
|
settings: {
|
|
fontStyle: "strikethrough",
|
|
},
|
|
},
|
|
{
|
|
scope: "markup.inserted",
|
|
settings: {
|
|
foreground: "var(--text-diff-add-base)",
|
|
},
|
|
},
|
|
{
|
|
scope: "markup.deleted",
|
|
settings: {
|
|
foreground: "var(--text-diff-delete-base)",
|
|
},
|
|
},
|
|
{
|
|
scope: "markup.changed",
|
|
settings: {
|
|
foreground: "var(--text-base)",
|
|
},
|
|
},
|
|
{
|
|
scope: "punctuation.definition.quote.begin.markdown",
|
|
settings: {
|
|
foreground: "var(--markdown-block-quote)",
|
|
},
|
|
},
|
|
{
|
|
scope: "punctuation.definition.list.begin.markdown",
|
|
settings: {
|
|
foreground: "var(--markdown-list-enumeration)",
|
|
},
|
|
},
|
|
{
|
|
scope: "markup.inline.raw",
|
|
settings: {
|
|
foreground: "var(--markdown-code)",
|
|
},
|
|
},
|
|
{
|
|
scope: "punctuation.definition.tag",
|
|
settings: {
|
|
foreground: "var(--syntax-punctuation)",
|
|
},
|
|
},
|
|
{
|
|
scope: ["meta.preprocessor", "entity.name.function.preprocessor"],
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: "meta.preprocessor.string",
|
|
settings: {
|
|
foreground: "var(--syntax-string)",
|
|
},
|
|
},
|
|
{
|
|
scope: "meta.preprocessor.numeric",
|
|
settings: {
|
|
foreground: "var(--syntax-number)",
|
|
},
|
|
},
|
|
{
|
|
scope: "meta.structure.dictionary.key.python",
|
|
settings: {
|
|
foreground: "var(--syntax-variable)",
|
|
},
|
|
},
|
|
{
|
|
scope: "meta.diff.header",
|
|
settings: {
|
|
foreground: "var(--text-weak)",
|
|
},
|
|
},
|
|
{
|
|
scope: "storage",
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: "storage.type",
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: ["storage.modifier", "keyword.operator.noexcept"],
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: ["string", "meta.embedded.assembly"],
|
|
settings: {
|
|
foreground: "var(--syntax-string)",
|
|
},
|
|
},
|
|
{
|
|
scope: "string.tag",
|
|
settings: {
|
|
foreground: "var(--syntax-string)",
|
|
},
|
|
},
|
|
{
|
|
scope: "string.value",
|
|
settings: {
|
|
foreground: "var(--syntax-string)",
|
|
},
|
|
},
|
|
{
|
|
scope: "string.regexp",
|
|
settings: {
|
|
foreground: "var(--syntax-operator)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"punctuation.definition.template-expression.begin",
|
|
"punctuation.definition.template-expression.end",
|
|
"punctuation.section.embedded",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: ["meta.template.expression"],
|
|
settings: {
|
|
foreground: "var(--text-base)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"support.type.vendored.property-name",
|
|
"support.type.property-name",
|
|
"source.css variable",
|
|
"source.coffee.embedded",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-variable)",
|
|
},
|
|
},
|
|
{
|
|
scope: "keyword",
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: "keyword.control",
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: "keyword.operator",
|
|
settings: {
|
|
foreground: "var(--syntax-operator)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"keyword.operator.new",
|
|
"keyword.operator.expression",
|
|
"keyword.operator.cast",
|
|
"keyword.operator.sizeof",
|
|
"keyword.operator.alignof",
|
|
"keyword.operator.typeid",
|
|
"keyword.operator.alignas",
|
|
"keyword.operator.instanceof",
|
|
"keyword.operator.logical.python",
|
|
"keyword.operator.wordlike",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: "keyword.other.unit",
|
|
settings: {
|
|
foreground: "var(--syntax-number)",
|
|
},
|
|
},
|
|
{
|
|
scope: ["punctuation.section.embedded.begin.php", "punctuation.section.embedded.end.php"],
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: "support.function.git-rebase",
|
|
settings: {
|
|
foreground: "var(--syntax-variable)",
|
|
},
|
|
},
|
|
{
|
|
scope: "constant.sha.git-rebase",
|
|
settings: {
|
|
foreground: "var(--syntax-number)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"storage.modifier.import.java",
|
|
"variable.language.wildcard.java",
|
|
"storage.modifier.package.java",
|
|
],
|
|
settings: {
|
|
foreground: "var(--text-base)",
|
|
},
|
|
},
|
|
{
|
|
scope: "variable.language",
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"entity.name.function",
|
|
"support.function",
|
|
"support.constant.handlebars",
|
|
"source.powershell variable.other.member",
|
|
"entity.name.operator.custom-literal",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-function)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"support.class",
|
|
"support.type",
|
|
"entity.name.type",
|
|
"entity.name.namespace",
|
|
"entity.other.attribute",
|
|
"entity.name.scope-resolution",
|
|
"entity.name.class",
|
|
"storage.type.numeric.go",
|
|
"storage.type.byte.go",
|
|
"storage.type.boolean.go",
|
|
"storage.type.string.go",
|
|
"storage.type.uintptr.go",
|
|
"storage.type.error.go",
|
|
"storage.type.rune.go",
|
|
"storage.type.cs",
|
|
"storage.type.generic.cs",
|
|
"storage.type.modifier.cs",
|
|
"storage.type.variable.cs",
|
|
"storage.type.annotation.java",
|
|
"storage.type.generic.java",
|
|
"storage.type.java",
|
|
"storage.type.object.array.java",
|
|
"storage.type.primitive.array.java",
|
|
"storage.type.primitive.java",
|
|
"storage.type.token.java",
|
|
"storage.type.groovy",
|
|
"storage.type.annotation.groovy",
|
|
"storage.type.parameters.groovy",
|
|
"storage.type.generic.groovy",
|
|
"storage.type.object.array.groovy",
|
|
"storage.type.primitive.array.groovy",
|
|
"storage.type.primitive.groovy",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-type)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"meta.type.cast.expr",
|
|
"meta.type.new.expr",
|
|
"support.constant.math",
|
|
"support.constant.dom",
|
|
"support.constant.json",
|
|
"entity.other.inherited-class",
|
|
"punctuation.separator.namespace.ruby",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-type)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"keyword.control",
|
|
"source.cpp keyword.operator.new",
|
|
"keyword.operator.delete",
|
|
"keyword.other.using",
|
|
"keyword.other.directive.using",
|
|
"keyword.other.operator",
|
|
"entity.name.operator",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-operator)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"variable",
|
|
"meta.definition.variable.name",
|
|
"support.variable",
|
|
"entity.name.variable",
|
|
"constant.other.placeholder",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-variable)",
|
|
},
|
|
},
|
|
{
|
|
scope: ["variable.other.constant", "variable.other.enummember"],
|
|
settings: {
|
|
foreground: "var(--syntax-variable)",
|
|
},
|
|
},
|
|
{
|
|
scope: ["meta.object-literal.key"],
|
|
settings: {
|
|
foreground: "var(--syntax-variable)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"support.constant.property-value",
|
|
"support.constant.font-name",
|
|
"support.constant.media-type",
|
|
"support.constant.media",
|
|
"constant.other.color.rgb-value",
|
|
"constant.other.rgb-value",
|
|
"support.constant.color",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-string)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"punctuation.definition.group.regexp",
|
|
"punctuation.definition.group.assertion.regexp",
|
|
"punctuation.definition.character-class.regexp",
|
|
"punctuation.character.set.begin.regexp",
|
|
"punctuation.character.set.end.regexp",
|
|
"keyword.operator.negation.regexp",
|
|
"support.other.parenthesis.regexp",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-string)",
|
|
},
|
|
},
|
|
{
|
|
scope: [
|
|
"constant.character.character-class.regexp",
|
|
"constant.other.character-class.set.regexp",
|
|
"constant.other.character-class.regexp",
|
|
"constant.character.set.regexp",
|
|
],
|
|
settings: {
|
|
foreground: "var(--syntax-operator)",
|
|
},
|
|
},
|
|
{
|
|
scope: ["keyword.operator.or.regexp", "keyword.control.anchor.regexp"],
|
|
settings: {
|
|
foreground: "var(--syntax-operator)",
|
|
},
|
|
},
|
|
{
|
|
scope: "keyword.operator.quantifier.regexp",
|
|
settings: {
|
|
foreground: "var(--syntax-operator)",
|
|
},
|
|
},
|
|
{
|
|
scope: ["constant.character", "constant.other.option"],
|
|
settings: {
|
|
foreground: "var(--syntax-keyword)",
|
|
},
|
|
},
|
|
{
|
|
scope: "constant.character.escape",
|
|
settings: {
|
|
foreground: "var(--syntax-operator)",
|
|
},
|
|
},
|
|
{
|
|
scope: "entity.name.label",
|
|
settings: {
|
|
foreground: "var(--text-weak)",
|
|
},
|
|
},
|
|
],
|
|
type: "dark",
|
|
}
|
|
|
|
const highlighter = await createHighlighter({
|
|
themes: [theme],
|
|
langs: [],
|
|
})
|
|
|
|
export const { use: useShiki, provider: ShikiProvider } = createSimpleContext({
|
|
name: "Shiki",
|
|
init: () => {
|
|
return highlighter
|
|
},
|
|
})
|