import * as monaco from 'monaco-editor' export const LOG_LANGUAGE_ID = 'log' export function registerLogLanguage() { monaco.languages.register({ id: LOG_LANGUAGE_ID }) monaco.languages.setMonarchTokensProvider(LOG_LANGUAGE_ID, { tokenizer: { root: [ // 时间戳 [/\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(?:\.\d+)?/, 'log.timestamp'], // level [/\b(\[INFO\]|\[Info\]|\[info\]|\[I\])\b/, 'log.info'], [/\b(\[WARN\]|\[Warn\]|\[warn\]|\[WARNING\]|\[W\])\b/, 'log.warn'], [/\b(\[ERROR\]|\[Error\]|\[error\]|\[E\])\b/, 'log.error'], [/\b(\[DEBUG\]|\[Debug\]|\[debug\]|\[D\])\b/, 'log.debug'], // 数字 [/\b\d+\b/, 'number'], // 路径 [/(\/[a-zA-Z0-9._-]+)+/, 'string'] ] } }) // 悬浮提示(可选) monaco.languages.registerHoverProvider(LOG_LANGUAGE_ID, { provideHover(model, position) { const word = model.getWordAtPosition(position) if (!word) return null if (word.word.toUpperCase() === 'ERROR') { return { contents: [{ value: '**ERROR** 日志级别' }] } } return null } }) }