@deephaven/console 1.30.0 → 1.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"MonacoProviders.js","names":["PureComponent","monaco","Log","init","Workspace","RUFF_DEFAULT_SETTINGS","MonacoUtils","log","module","MonacoProviders","initRuff","_asyncToGenerator","isRuffEnabled","initRuffPromise","then","debug","version","isRuffInitialized","updateRuffWorkspace","prevLog","console","undefined","ruffWorkspace","ruffSettings","lintAllPython","setRuffSettings","settings","arguments","length","getDiagnostics","model","diagnostics","check","getValue","isConsoleModel","filter","d","code","editor","removeAllMarkers","getModels","m","getLanguageId","forEach","lintPython","concat","uri","toString","setModelMarkers","map","isUnnecessary","isSyntaxError","startLineNumber","location","row","startColumn","column","endLineNumber","end_location","endColumn","message","severity","MarkerSeverity","Error","Warning","tags","MarkerTag","Unnecessary","lspToMonacoKind","kind","monacoKinds","languages","CompletionItemKind","Text","Method","Function","Constructor","Field","Variable","Class","Interface","Module","Property","Unit","Value","Enum","Keyword","Snippet","Color","File","Reference","Folder","EnumMember","Constant","Struct","Event","Operator","TypeParameter","lspToMonacoRange","range","start","end","line","character","monacoToLspPosition","position","lineNumber","handlePythonCodeActionRequest","actions","dispose","diagnosticRange","Range","intersectRanges","fixActions","_ref","fix","title","id","edit","edits","_edit$content","resource","versionId","getVersionId","textEdit","text","content","seenCodes","Set","duplicateCodes","has","add","disableLineActions","getLineContent","lastToken","tokenize","at","lineEdit","type","startsWith","offset","flat","action","i","arr","find","a","disableGlobalActions","handlePythonFormatRequest","options","token","getFullModelRange","format","constructor","props","_defineProperty","handleCompletionRequest","bind","handleSignatureRequest","handleHoverRequest","componentDidMount","_this$props","language","session","registeredCompletionProvider","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","getSignatureHelp","registeredSignatureProvider","registerSignatureHelpProvider","provideSignatureHelp","signatureHelpTriggerCharacters","getHover","registeredHoverProvider","registerHoverProvider","provideHover","componentWillUnmount","_this$registeredCompl","_this$registeredSigna","_this$registeredHover","context","_this$props2","propModel","params","textDocument","completionItems","getCompletionItems","monacoCompletionItems","items","suggestions","item","label","detail","documentation","sortText","filterText","insertTextFormat","value","insertText","insertTextRules","incomplete","catch","error","defaultResult","signatures","activeSignature","activeParameter","_this$props3","signatureItems","monacoSignatures","parameters","_this$props4","hover","monacoHover","hoverItem","hoverContents","contents","render"],"sources":["../../src/monaco/MonacoProviders.tsx"],"sourcesContent":["/**\n * Completion provider for a code session\n */\nimport { PureComponent } from 'react';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\nimport init, { Workspace, type Diagnostic } from '@astral-sh/ruff-wasm-web';\nimport RUFF_DEFAULT_SETTINGS from './RuffDefaultSettings';\nimport MonacoUtils from './MonacoUtils';\n\nconst log = Log.module('MonacoCompletionProvider');\n\ninterface MonacoProviderProps {\n model: monaco.editor.ITextModel;\n session: dh.IdeSession;\n language: string;\n}\n\n/**\n * Registers a completion provider with monaco for the language and session provided.\n */\nclass MonacoProviders extends PureComponent<\n MonacoProviderProps,\n Record<string, never>\n> {\n static ruffWorkspace?: Workspace;\n\n static initRuffPromise?: Promise<void>;\n\n static isRuffInitialized = false;\n\n static isRuffEnabled = true;\n\n static ruffSettings: Record<string, unknown> = RUFF_DEFAULT_SETTINGS;\n\n /**\n * Loads and initializes Ruff if it is enabled.\n * Subsequent calls will return the same promise.\n */\n static async initRuff(): Promise<void> {\n if (!MonacoProviders.isRuffEnabled) {\n return;\n }\n if (MonacoProviders.initRuffPromise) {\n return MonacoProviders.initRuffPromise;\n }\n\n MonacoProviders.initRuffPromise = init({}).then(() => {\n log.debug('Initialized Ruff', Workspace.version());\n MonacoProviders.isRuffInitialized = true;\n MonacoProviders.updateRuffWorkspace();\n });\n\n return MonacoProviders.initRuffPromise;\n }\n\n /**\n * Updates the current ruff workspace with MonacoProviders.ruffSettings.\n * Re-lints all Python models after updating.\n */\n static updateRuffWorkspace(): void {\n if (!MonacoProviders.isRuffInitialized) {\n return;\n }\n\n /* eslint-disable no-console */\n const prevLog = console.log;\n try {\n console.log = () => undefined; // Suppress not useful ruff-wasm-web logs when it creates the workspace\n MonacoProviders.ruffWorkspace = new Workspace(\n MonacoProviders.ruffSettings\n );\n } finally {\n console.log = prevLog; // Restore console.log\n }\n /* eslint-enable no-console */\n\n MonacoProviders.lintAllPython();\n }\n\n /**\n * Sets ruff settings\n * @param settings The ruff settings\n */\n static setRuffSettings(\n settings: Record<string, unknown> = MonacoProviders.ruffSettings\n ): void {\n MonacoProviders.ruffSettings = settings;\n\n if (!MonacoProviders.isRuffInitialized) {\n MonacoProviders.initRuff();\n return;\n }\n\n MonacoProviders.updateRuffWorkspace();\n }\n\n static getDiagnostics(model: monaco.editor.ITextModel): Diagnostic[] {\n if (!MonacoProviders.ruffWorkspace) {\n return [];\n }\n\n const diagnostics = MonacoProviders.ruffWorkspace.check(\n model.getValue()\n ) as Diagnostic[];\n if (MonacoUtils.isConsoleModel(model)) {\n // Only want SyntaxErrors for console which have no code\n return diagnostics.filter(d => d.code == null);\n }\n return diagnostics;\n }\n\n static lintAllPython(): void {\n if (!MonacoProviders.isRuffEnabled) {\n monaco.editor.removeAllMarkers('ruff');\n return;\n }\n\n monaco.editor\n .getModels()\n .filter(m => m.getLanguageId() === 'python')\n .forEach(MonacoProviders.lintPython);\n }\n\n static lintPython(model: monaco.editor.ITextModel): void {\n if (!MonacoProviders.isRuffEnabled) {\n return;\n }\n\n if (!MonacoProviders.ruffWorkspace) {\n return;\n }\n\n const diagnostics = MonacoProviders.getDiagnostics(model);\n log.debug(`Linting Python document: ${model.uri.toString()}`, diagnostics);\n\n monaco.editor.setModelMarkers(\n model,\n 'ruff',\n diagnostics.map((d: Diagnostic) => {\n // Unused variable or import. Mark as unnecessary to fade the text\n const isUnnecessary = d.code === 'F401' || d.code === 'F841';\n const isSyntaxError = d.code == null; // SyntaxError has no error code\n return {\n startLineNumber: d.location.row,\n startColumn: d.location.column,\n endLineNumber: d.end_location.row,\n endColumn: d.end_location.column,\n message: isSyntaxError ? d.message : `${d.code}: ${d.message}`,\n severity: isSyntaxError\n ? monaco.MarkerSeverity.Error\n : monaco.MarkerSeverity.Warning,\n tags: isUnnecessary ? [monaco.MarkerTag.Unnecessary] : [],\n };\n })\n );\n }\n\n /**\n * Converts LSP CompletionItemKind to Monaco CompletionItemKind\n * Defaults to Variable if no LSP kind was provided\n * https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItemKind\n *\n * @param kind The LSP kind\n * @returns Monaco kind\n */\n static lspToMonacoKind(kind: number | undefined): number {\n const monacoKinds = monaco.languages.CompletionItemKind;\n switch (kind) {\n case 1:\n return monacoKinds.Text;\n case 2:\n return monacoKinds.Method;\n case 3:\n return monacoKinds.Function;\n case 4:\n return monacoKinds.Constructor;\n case 5:\n return monacoKinds.Field;\n case 6:\n return monacoKinds.Variable;\n case 7:\n return monacoKinds.Class;\n case 8:\n return monacoKinds.Interface;\n case 9:\n return monacoKinds.Module;\n case 10:\n return monacoKinds.Property;\n case 11:\n return monacoKinds.Unit;\n case 12:\n return monacoKinds.Value;\n case 13:\n return monacoKinds.Enum;\n case 14:\n return monacoKinds.Keyword;\n case 15:\n return monacoKinds.Snippet;\n case 16:\n return monacoKinds.Color;\n case 17:\n return monacoKinds.File;\n case 18:\n return monacoKinds.Reference;\n case 19:\n return monacoKinds.Folder;\n case 20:\n return monacoKinds.EnumMember;\n case 21:\n return monacoKinds.Constant;\n case 22:\n return monacoKinds.Struct;\n case 23:\n return monacoKinds.Event;\n case 24:\n return monacoKinds.Operator;\n case 25:\n return monacoKinds.TypeParameter;\n default:\n return monacoKinds.Variable;\n }\n }\n\n /**\n * Converts an LSP document range to a monaco range\n * Accounts for LSP indexing from 0 and monaco indexing from 1\n *\n * @param range The LSP document range to convert\n * @returns The corresponding monaco range\n */\n static lspToMonacoRange(range: dh.lsp.Range): monaco.IRange {\n const { start, end } = range;\n\n // Monaco expects the columns/ranges to start at 1. LSP starts at 0\n return {\n startLineNumber: start.line + 1,\n startColumn: start.character + 1,\n endLineNumber: end.line + 1,\n endColumn: end.character + 1,\n };\n }\n\n /**\n * Converts a monaco position to an LSP position\n * Accounts for LSP indexing from 0 and monaco indexing from 1\n *\n * @param position The monaco position\n * @returns The corresponding LSP position\n */\n static monacoToLspPosition(\n position: monaco.IPosition\n ): Pick<dh.lsp.Position, 'line' | 'character'> {\n // Monaco 1-indexes Position. LSP 0-indexes Position\n return {\n line: position.lineNumber - 1,\n character: position.column - 1,\n };\n }\n\n static handlePythonCodeActionRequest(\n model: monaco.editor.ITextModel,\n range: monaco.Range\n ): monaco.languages.ProviderResult<monaco.languages.CodeActionList> {\n if (!MonacoProviders.isRuffEnabled || !MonacoProviders.ruffWorkspace) {\n return {\n actions: [],\n dispose: () => {\n /* no-op */\n },\n };\n }\n\n const diagnostics = MonacoProviders.getDiagnostics(model).filter(d => {\n const diagnosticRange = new monaco.Range(\n d.location.row,\n d.location.column,\n d.end_location.row,\n d.end_location.column\n );\n return (\n d.code != null && // Syntax errors have no code and can't be fixed/disabled\n diagnosticRange.intersectRanges(range)\n );\n });\n\n const fixActions: monaco.languages.CodeAction[] = diagnostics\n .filter(({ fix }) => fix != null)\n .map(d => {\n let title = 'Fix';\n if (d.fix != null) {\n if (d.fix.message != null && d.fix.message !== '') {\n title = `${d.code}: ${d.fix.message}`;\n } else {\n title = `Fix ${d.code}`;\n }\n }\n return {\n title,\n id: `fix-${d.code}`,\n kind: 'quickfix',\n edit: d.fix\n ? {\n edits: d.fix.edits.map(edit => ({\n resource: model.uri,\n versionId: model.getVersionId(),\n textEdit: {\n range: {\n startLineNumber: edit.location.row,\n startColumn: edit.location.column,\n endLineNumber: edit.end_location.row,\n endColumn: edit.end_location.column,\n },\n text: edit.content ?? '',\n },\n })),\n }\n : undefined,\n };\n });\n\n const seenCodes = new Set<string>();\n const duplicateCodes = new Set<string>();\n diagnostics.forEach(d => {\n if (d.code == null) {\n return;\n }\n if (seenCodes.has(d.code)) {\n duplicateCodes.add(d.code);\n }\n seenCodes.add(d.code);\n });\n\n const disableLineActions: monaco.languages.CodeAction[] = diagnostics\n .map(d => {\n if (d.code == null) {\n // The nulls are already filtered out, but TS doesn't know that\n return [];\n }\n const line = model.getLineContent(d.location.row);\n const lastToken = monaco.editor\n .tokenize(line, model.getLanguageId())[0]\n .at(-1);\n const lineEdit = {\n range: {\n startLineNumber: d.location.row,\n startColumn: line.length + 1,\n endLineNumber: d.location.row,\n endColumn: line.length + 1,\n },\n text: ` # noqa: ${d.code}`,\n };\n if (lastToken != null && lastToken.type.startsWith('comment')) {\n // Already a comment at the end of the line\n lineEdit.text = `# noqa: ${d.code} `;\n if (line.startsWith('# noqa:', lastToken.offset)) {\n // Already another suppressed rule on the line\n lineEdit.range.startColumn = lastToken.offset + 1;\n lineEdit.range.endColumn = lastToken.offset + 9; // \"# noqa: \" length + 1 to offset\n } else {\n lineEdit.range.startColumn = lastToken.offset + 1;\n lineEdit.range.endColumn = line.startsWith('# ', lastToken.offset)\n ? lastToken.offset + 3 // \"# \" + 1 to offset\n : lastToken.offset + 2; // \"#\" + 1 to offset\n }\n }\n return [\n {\n title: `Disable ${d.code} for ${\n duplicateCodes.has(d.code)\n ? `line ${d.location.row}`\n : 'this line'\n }`,\n kind: 'quickfix',\n edit: {\n edits: [\n {\n resource: model.uri,\n versionId: model.getVersionId(),\n textEdit: lineEdit,\n },\n ],\n },\n },\n ];\n })\n .flat()\n .filter(\n // Remove actions with duplicate titles as you can't disable the same rule on a line twice\n (action, i, arr) => arr.find(a => a.title === action.title) === action\n );\n\n const disableGlobalActions: monaco.languages.CodeAction[] = [\n ...seenCodes,\n ].map(code => ({\n title: `Disable ${code} for this file`,\n kind: 'quickfix',\n edit: {\n edits: [\n {\n resource: model.uri,\n versionId: model.getVersionId(),\n textEdit: {\n range: {\n startLineNumber: 1,\n startColumn: 1,\n endLineNumber: 1,\n endColumn: 1,\n },\n text: `# ruff: noqa: ${code}\\n`,\n },\n },\n ],\n },\n }));\n\n return {\n actions: [...fixActions, ...disableLineActions, ...disableGlobalActions],\n dispose: () => {\n /* no-op */\n },\n };\n }\n\n static handlePythonFormatRequest(\n model: monaco.editor.ITextModel,\n options: monaco.languages.FormattingOptions,\n token: monaco.CancellationToken\n ): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {\n if (!MonacoProviders.ruffWorkspace) {\n return;\n }\n\n log.debug(`Formatting Python document: ${model.uri.toString}`);\n\n return [\n {\n range: model.getFullModelRange(),\n text: MonacoProviders.ruffWorkspace.format(model.getValue()),\n },\n ];\n }\n\n constructor(props: MonacoProviderProps) {\n super(props);\n\n this.handleCompletionRequest = this.handleCompletionRequest.bind(this);\n this.handleSignatureRequest = this.handleSignatureRequest.bind(this);\n this.handleHoverRequest = this.handleHoverRequest.bind(this);\n }\n\n componentDidMount(): void {\n const { language, session } = this.props;\n\n this.registeredCompletionProvider =\n monaco.languages.registerCompletionItemProvider(language, {\n provideCompletionItems: this.handleCompletionRequest,\n triggerCharacters: ['.', '\"', \"'\"],\n });\n\n if (session.getSignatureHelp != null) {\n this.registeredSignatureProvider =\n monaco.languages.registerSignatureHelpProvider(language, {\n provideSignatureHelp: this.handleSignatureRequest,\n signatureHelpTriggerCharacters: ['(', ','],\n });\n }\n\n if (session.getHover != null) {\n this.registeredHoverProvider = monaco.languages.registerHoverProvider(\n language,\n {\n provideHover: this.handleHoverRequest,\n }\n );\n }\n }\n\n componentWillUnmount(): void {\n this.registeredCompletionProvider?.dispose();\n this.registeredSignatureProvider?.dispose();\n this.registeredHoverProvider?.dispose();\n }\n\n registeredCompletionProvider?: monaco.IDisposable;\n\n registeredSignatureProvider?: monaco.IDisposable;\n\n registeredHoverProvider?: monaco.IDisposable;\n\n handleCompletionRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n context: monaco.languages.CompletionContext\n ): monaco.languages.ProviderResult<monaco.languages.CompletionList> {\n const { model: propModel, session } = this.props;\n if (model !== propModel) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n context,\n };\n\n const completionItems = session.getCompletionItems(params);\n log.debug('Requested completion items', params);\n\n const monacoCompletionItems = completionItems\n .then(items => {\n log.debug('Completion items received: ', params, items);\n\n const suggestions = items.map(item => {\n const {\n label,\n kind,\n detail,\n documentation,\n sortText,\n filterText,\n textEdit,\n insertTextFormat,\n } = item;\n\n return {\n label,\n kind: MonacoProviders.lspToMonacoKind(kind),\n detail,\n documentation:\n documentation?.kind === 'markdown'\n ? documentation\n : documentation?.value,\n sortText,\n filterText,\n insertText: textEdit.text,\n // We are basically guessing that LSP's insertTextFormat===2 is\n // semantically equivalent to monaco's insertTextRules===4.\n // Why microsoft is using almost-but-not-LSP apis is beyond me....\n insertTextRules: insertTextFormat === 2 ? 4 : insertTextFormat,\n range: MonacoProviders.lspToMonacoRange(textEdit.range),\n };\n });\n\n return {\n incomplete: true,\n suggestions,\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return { suggestions: [] };\n });\n\n return monacoCompletionItems;\n }\n\n handleSignatureRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n token: monaco.CancellationToken,\n context: monaco.languages.SignatureHelpContext\n ): monaco.languages.ProviderResult<monaco.languages.SignatureHelpResult> {\n const defaultResult: monaco.languages.SignatureHelpResult = {\n value: {\n signatures: [],\n activeSignature: 0,\n activeParameter: 0,\n },\n dispose: () => {\n /* no-op */\n },\n };\n\n const { model: propModel, session } = this.props;\n if (model !== propModel || session.getSignatureHelp == null) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n context,\n };\n\n const signatureItems = session.getSignatureHelp(params);\n log.debug('Requested signature help', params);\n\n const monacoSignatures = signatureItems\n .then(items => {\n log.debug('Signatures received: ', params, signatureItems);\n const signatures = items.map(item => {\n const { label, documentation, parameters } = item;\n\n return {\n documentation:\n documentation?.kind === 'markdown'\n ? documentation\n : documentation?.value,\n label,\n parameters: parameters ?? [],\n };\n });\n\n if (signatures.length === 0) {\n return defaultResult;\n }\n\n // For now we will assume we only autocomplete Python w/ 1 signature\n // For multiple signatures, this may need to be sent through the request as context\n const activeSignature = 0;\n\n return {\n value: {\n signatures,\n activeSignature,\n activeParameter: items[activeSignature].activeParameter,\n },\n dispose: () => {\n /* no-op */\n },\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return defaultResult;\n });\n\n return monacoSignatures;\n }\n\n handleHoverRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position\n ): monaco.languages.ProviderResult<monaco.languages.Hover> {\n const { model: propModel, session } = this.props;\n if (model !== propModel || session.getHover == null) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n };\n\n const hover = session.getHover(params);\n log.debug('Requested hover', params);\n\n const monacoHover = hover\n .then(hoverItem => {\n log.debug('Hover received: ', params, hoverItem);\n const { contents: hoverContents } = hoverItem;\n\n return {\n contents: hoverContents != null ? [hoverContents] : [],\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving hover', error);\n return { contents: [] };\n });\n\n return monacoHover;\n }\n\n render(): null {\n return null;\n }\n}\n\nexport default MonacoProviders;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MonacoProviders.js","names":["PureComponent","Log","init","Workspace","RUFF_DEFAULT_SETTINGS","MonacoUtils","log","module","MonacoProviders","initRuff","_asyncToGenerator","isRuffEnabled","initRuffPromise","Promise","resolve","whenLoaded","then","debug","version","isRuffInitialized","updateRuffWorkspace","prevLog","console","undefined","ruffWorkspace","ruffSettings","lintAllPython","setRuffSettings","settings","arguments","length","getDiagnostics","model","diagnostics","check","getValue","isConsoleModel","filter","d","code","monaco","getMonaco","editor","removeAllMarkers","getModels","m","getLanguageId","forEach","lintPython","concat","uri","toString","setModelMarkers","map","isUnnecessary","isSyntaxError","startLineNumber","location","row","startColumn","column","endLineNumber","end_location","endColumn","message","severity","MarkerSeverity","Error","Warning","tags","MarkerTag","Unnecessary","lspToMonacoKind","kind","monacoKinds","languages","CompletionItemKind","Text","Method","Function","Constructor","Field","Variable","Class","Interface","Module","Property","Unit","Value","Enum","Keyword","Snippet","Color","File","Reference","Folder","EnumMember","Constant","Struct","Event","Operator","TypeParameter","lspToMonacoRange","range","start","end","line","character","monacoToLspPosition","position","lineNumber","handlePythonCodeActionRequest","actions","dispose","diagnosticRange","Range","intersectRanges","fixActions","_ref","fix","title","id","edit","edits","_edit$content","resource","versionId","getVersionId","textEdit","text","content","seenCodes","Set","duplicateCodes","has","add","disableLineActions","getLineContent","lastToken","tokenize","at","lineEdit","type","startsWith","offset","flat","action","i","arr","find","a","disableGlobalActions","handlePythonFormatRequest","options","token","getFullModelRange","format","constructor","props","_defineProperty","handleCompletionRequest","bind","handleSignatureRequest","handleHoverRequest","componentDidMount","_this$props","language","session","registeredCompletionProvider","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","getSignatureHelp","registeredSignatureProvider","registerSignatureHelpProvider","provideSignatureHelp","signatureHelpTriggerCharacters","getHover","registeredHoverProvider","registerHoverProvider","provideHover","componentWillUnmount","_this$registeredCompl","_this$registeredSigna","_this$registeredHover","context","_this$props2","propModel","params","textDocument","completionItems","getCompletionItems","monacoCompletionItems","items","suggestions","item","label","detail","documentation","sortText","filterText","insertTextFormat","value","insertText","insertTextRules","incomplete","catch","error","defaultResult","signatures","activeSignature","activeParameter","_this$props3","signatureItems","monacoSignatures","parameters","_this$props4","hover","monacoHover","hoverItem","hoverContents","contents","render"],"sources":["../../src/monaco/MonacoProviders.tsx"],"sourcesContent":["/**\n * Completion provider for a code session\n */\nimport { PureComponent } from 'react';\nimport type * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\nimport init, { Workspace, type Diagnostic } from '@astral-sh/ruff-wasm-web';\nimport RUFF_DEFAULT_SETTINGS from './RuffDefaultSettings';\nimport MonacoUtils from './MonacoUtils';\n\nconst log = Log.module('MonacoCompletionProvider');\n\ninterface MonacoProviderProps {\n model: monaco.editor.ITextModel;\n session: dh.IdeSession;\n language: string;\n}\n\n/**\n * Registers a completion provider with monaco for the language and session provided.\n */\nclass MonacoProviders extends PureComponent<\n MonacoProviderProps,\n Record<string, never>\n> {\n static ruffWorkspace?: Workspace;\n\n static initRuffPromise?: Promise<void>;\n\n static isRuffInitialized = false;\n\n static isRuffEnabled = true;\n\n static ruffSettings: Record<string, unknown> = RUFF_DEFAULT_SETTINGS;\n\n /**\n * Loads and initializes Ruff if it is enabled.\n * Subsequent calls will return the same promise.\n */\n static async initRuff(): Promise<void> {\n if (!MonacoProviders.isRuffEnabled) {\n return;\n }\n if (MonacoProviders.initRuffPromise) {\n return MonacoProviders.initRuffPromise;\n }\n\n // Ruff is only useful once an editor has loaded Monaco. Wait for that\n // rather than loading Monaco here\n MonacoProviders.initRuffPromise = new Promise<void>(resolve => {\n MonacoUtils.whenLoaded(resolve);\n })\n .then(() => init({}))\n .then(() => {\n log.debug('Initialized Ruff', Workspace.version());\n MonacoProviders.isRuffInitialized = true;\n MonacoProviders.updateRuffWorkspace();\n });\n\n return MonacoProviders.initRuffPromise;\n }\n\n /**\n * Updates the current ruff workspace with MonacoProviders.ruffSettings.\n * Re-lints all Python models after updating.\n */\n static updateRuffWorkspace(): void {\n if (!MonacoProviders.isRuffInitialized) {\n return;\n }\n\n /* eslint-disable no-console */\n const prevLog = console.log;\n try {\n console.log = () => undefined; // Suppress not useful ruff-wasm-web logs when it creates the workspace\n MonacoProviders.ruffWorkspace = new Workspace(\n MonacoProviders.ruffSettings\n );\n } finally {\n console.log = prevLog; // Restore console.log\n }\n /* eslint-enable no-console */\n\n MonacoProviders.lintAllPython();\n }\n\n /**\n * Sets ruff settings\n * @param settings The ruff settings\n */\n static setRuffSettings(\n settings: Record<string, unknown> = MonacoProviders.ruffSettings\n ): void {\n MonacoProviders.ruffSettings = settings;\n\n if (!MonacoProviders.isRuffInitialized) {\n MonacoProviders.initRuff();\n return;\n }\n\n MonacoProviders.updateRuffWorkspace();\n }\n\n static getDiagnostics(model: monaco.editor.ITextModel): Diagnostic[] {\n if (!MonacoProviders.ruffWorkspace) {\n return [];\n }\n\n const diagnostics = MonacoProviders.ruffWorkspace.check(\n model.getValue()\n ) as Diagnostic[];\n if (MonacoUtils.isConsoleModel(model)) {\n // Only want SyntaxErrors for console which have no code\n return diagnostics.filter(d => d.code == null);\n }\n return diagnostics;\n }\n\n static lintAllPython(): void {\n const monaco = MonacoUtils.getMonaco();\n if (!MonacoProviders.isRuffEnabled) {\n monaco.editor.removeAllMarkers('ruff');\n return;\n }\n\n monaco.editor\n .getModels()\n .filter(m => m.getLanguageId() === 'python')\n .forEach(MonacoProviders.lintPython);\n }\n\n static lintPython(model: monaco.editor.ITextModel): void {\n if (!MonacoProviders.isRuffEnabled) {\n return;\n }\n\n if (!MonacoProviders.ruffWorkspace) {\n return;\n }\n\n const monaco = MonacoUtils.getMonaco();\n const diagnostics = MonacoProviders.getDiagnostics(model);\n log.debug(`Linting Python document: ${model.uri.toString()}`, diagnostics);\n\n monaco.editor.setModelMarkers(\n model,\n 'ruff',\n diagnostics.map((d: Diagnostic) => {\n // Unused variable or import. Mark as unnecessary to fade the text\n const isUnnecessary = d.code === 'F401' || d.code === 'F841';\n const isSyntaxError = d.code == null; // SyntaxError has no error code\n return {\n startLineNumber: d.location.row,\n startColumn: d.location.column,\n endLineNumber: d.end_location.row,\n endColumn: d.end_location.column,\n message: isSyntaxError ? d.message : `${d.code}: ${d.message}`,\n severity: isSyntaxError\n ? monaco.MarkerSeverity.Error\n : monaco.MarkerSeverity.Warning,\n tags: isUnnecessary ? [monaco.MarkerTag.Unnecessary] : [],\n };\n })\n );\n }\n\n /**\n * Converts LSP CompletionItemKind to Monaco CompletionItemKind\n * Defaults to Variable if no LSP kind was provided\n * https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItemKind\n *\n * @param kind The LSP kind\n * @returns Monaco kind\n */\n static lspToMonacoKind(kind: number | undefined): number {\n const monacoKinds = MonacoUtils.getMonaco().languages.CompletionItemKind;\n switch (kind) {\n case 1:\n return monacoKinds.Text;\n case 2:\n return monacoKinds.Method;\n case 3:\n return monacoKinds.Function;\n case 4:\n return monacoKinds.Constructor;\n case 5:\n return monacoKinds.Field;\n case 6:\n return monacoKinds.Variable;\n case 7:\n return monacoKinds.Class;\n case 8:\n return monacoKinds.Interface;\n case 9:\n return monacoKinds.Module;\n case 10:\n return monacoKinds.Property;\n case 11:\n return monacoKinds.Unit;\n case 12:\n return monacoKinds.Value;\n case 13:\n return monacoKinds.Enum;\n case 14:\n return monacoKinds.Keyword;\n case 15:\n return monacoKinds.Snippet;\n case 16:\n return monacoKinds.Color;\n case 17:\n return monacoKinds.File;\n case 18:\n return monacoKinds.Reference;\n case 19:\n return monacoKinds.Folder;\n case 20:\n return monacoKinds.EnumMember;\n case 21:\n return monacoKinds.Constant;\n case 22:\n return monacoKinds.Struct;\n case 23:\n return monacoKinds.Event;\n case 24:\n return monacoKinds.Operator;\n case 25:\n return monacoKinds.TypeParameter;\n default:\n return monacoKinds.Variable;\n }\n }\n\n /**\n * Converts an LSP document range to a monaco range\n * Accounts for LSP indexing from 0 and monaco indexing from 1\n *\n * @param range The LSP document range to convert\n * @returns The corresponding monaco range\n */\n static lspToMonacoRange(range: dh.lsp.Range): monaco.IRange {\n const { start, end } = range;\n\n // Monaco expects the columns/ranges to start at 1. LSP starts at 0\n return {\n startLineNumber: start.line + 1,\n startColumn: start.character + 1,\n endLineNumber: end.line + 1,\n endColumn: end.character + 1,\n };\n }\n\n /**\n * Converts a monaco position to an LSP position\n * Accounts for LSP indexing from 0 and monaco indexing from 1\n *\n * @param position The monaco position\n * @returns The corresponding LSP position\n */\n static monacoToLspPosition(\n position: monaco.IPosition\n ): Pick<dh.lsp.Position, 'line' | 'character'> {\n // Monaco 1-indexes Position. LSP 0-indexes Position\n return {\n line: position.lineNumber - 1,\n character: position.column - 1,\n };\n }\n\n static handlePythonCodeActionRequest(\n model: monaco.editor.ITextModel,\n range: monaco.Range\n ): monaco.languages.ProviderResult<monaco.languages.CodeActionList> {\n if (!MonacoProviders.isRuffEnabled || !MonacoProviders.ruffWorkspace) {\n return {\n actions: [],\n dispose: () => {\n /* no-op */\n },\n };\n }\n\n const monaco = MonacoUtils.getMonaco();\n const diagnostics = MonacoProviders.getDiagnostics(model).filter(d => {\n const diagnosticRange = new monaco.Range(\n d.location.row,\n d.location.column,\n d.end_location.row,\n d.end_location.column\n );\n return (\n d.code != null && // Syntax errors have no code and can't be fixed/disabled\n diagnosticRange.intersectRanges(range)\n );\n });\n\n const fixActions: monaco.languages.CodeAction[] = diagnostics\n .filter(({ fix }) => fix != null)\n .map(d => {\n let title = 'Fix';\n if (d.fix != null) {\n if (d.fix.message != null && d.fix.message !== '') {\n title = `${d.code}: ${d.fix.message}`;\n } else {\n title = `Fix ${d.code}`;\n }\n }\n return {\n title,\n id: `fix-${d.code}`,\n kind: 'quickfix',\n edit: d.fix\n ? {\n edits: d.fix.edits.map(edit => ({\n resource: model.uri,\n versionId: model.getVersionId(),\n textEdit: {\n range: {\n startLineNumber: edit.location.row,\n startColumn: edit.location.column,\n endLineNumber: edit.end_location.row,\n endColumn: edit.end_location.column,\n },\n text: edit.content ?? '',\n },\n })),\n }\n : undefined,\n };\n });\n\n const seenCodes = new Set<string>();\n const duplicateCodes = new Set<string>();\n diagnostics.forEach(d => {\n if (d.code == null) {\n return;\n }\n if (seenCodes.has(d.code)) {\n duplicateCodes.add(d.code);\n }\n seenCodes.add(d.code);\n });\n\n const disableLineActions: monaco.languages.CodeAction[] = diagnostics\n .map(d => {\n if (d.code == null) {\n // The nulls are already filtered out, but TS doesn't know that\n return [];\n }\n const line = model.getLineContent(d.location.row);\n const lastToken = monaco.editor\n .tokenize(line, model.getLanguageId())[0]\n .at(-1);\n const lineEdit = {\n range: {\n startLineNumber: d.location.row,\n startColumn: line.length + 1,\n endLineNumber: d.location.row,\n endColumn: line.length + 1,\n },\n text: ` # noqa: ${d.code}`,\n };\n if (lastToken != null && lastToken.type.startsWith('comment')) {\n // Already a comment at the end of the line\n lineEdit.text = `# noqa: ${d.code} `;\n if (line.startsWith('# noqa:', lastToken.offset)) {\n // Already another suppressed rule on the line\n lineEdit.range.startColumn = lastToken.offset + 1;\n lineEdit.range.endColumn = lastToken.offset + 9; // \"# noqa: \" length + 1 to offset\n } else {\n lineEdit.range.startColumn = lastToken.offset + 1;\n lineEdit.range.endColumn = line.startsWith('# ', lastToken.offset)\n ? lastToken.offset + 3 // \"# \" + 1 to offset\n : lastToken.offset + 2; // \"#\" + 1 to offset\n }\n }\n return [\n {\n title: `Disable ${d.code} for ${\n duplicateCodes.has(d.code)\n ? `line ${d.location.row}`\n : 'this line'\n }`,\n kind: 'quickfix',\n edit: {\n edits: [\n {\n resource: model.uri,\n versionId: model.getVersionId(),\n textEdit: lineEdit,\n },\n ],\n },\n },\n ];\n })\n .flat()\n .filter(\n // Remove actions with duplicate titles as you can't disable the same rule on a line twice\n (action, i, arr) => arr.find(a => a.title === action.title) === action\n );\n\n const disableGlobalActions: monaco.languages.CodeAction[] = [\n ...seenCodes,\n ].map(code => ({\n title: `Disable ${code} for this file`,\n kind: 'quickfix',\n edit: {\n edits: [\n {\n resource: model.uri,\n versionId: model.getVersionId(),\n textEdit: {\n range: {\n startLineNumber: 1,\n startColumn: 1,\n endLineNumber: 1,\n endColumn: 1,\n },\n text: `# ruff: noqa: ${code}\\n`,\n },\n },\n ],\n },\n }));\n\n return {\n actions: [...fixActions, ...disableLineActions, ...disableGlobalActions],\n dispose: () => {\n /* no-op */\n },\n };\n }\n\n static handlePythonFormatRequest(\n model: monaco.editor.ITextModel,\n options: monaco.languages.FormattingOptions,\n token: monaco.CancellationToken\n ): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {\n if (!MonacoProviders.ruffWorkspace) {\n return;\n }\n\n log.debug(`Formatting Python document: ${model.uri.toString}`);\n\n return [\n {\n range: model.getFullModelRange(),\n text: MonacoProviders.ruffWorkspace.format(model.getValue()),\n },\n ];\n }\n\n constructor(props: MonacoProviderProps) {\n super(props);\n\n this.handleCompletionRequest = this.handleCompletionRequest.bind(this);\n this.handleSignatureRequest = this.handleSignatureRequest.bind(this);\n this.handleHoverRequest = this.handleHoverRequest.bind(this);\n }\n\n componentDidMount(): void {\n const { language, session } = this.props;\n const monaco = MonacoUtils.getMonaco();\n\n this.registeredCompletionProvider =\n monaco.languages.registerCompletionItemProvider(language, {\n provideCompletionItems: this.handleCompletionRequest,\n triggerCharacters: ['.', '\"', \"'\"],\n });\n\n if (session.getSignatureHelp != null) {\n this.registeredSignatureProvider =\n monaco.languages.registerSignatureHelpProvider(language, {\n provideSignatureHelp: this.handleSignatureRequest,\n signatureHelpTriggerCharacters: ['(', ','],\n });\n }\n\n if (session.getHover != null) {\n this.registeredHoverProvider = monaco.languages.registerHoverProvider(\n language,\n {\n provideHover: this.handleHoverRequest,\n }\n );\n }\n }\n\n componentWillUnmount(): void {\n this.registeredCompletionProvider?.dispose();\n this.registeredSignatureProvider?.dispose();\n this.registeredHoverProvider?.dispose();\n }\n\n registeredCompletionProvider?: monaco.IDisposable;\n\n registeredSignatureProvider?: monaco.IDisposable;\n\n registeredHoverProvider?: monaco.IDisposable;\n\n handleCompletionRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n context: monaco.languages.CompletionContext\n ): monaco.languages.ProviderResult<monaco.languages.CompletionList> {\n const { model: propModel, session } = this.props;\n if (model !== propModel) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n context,\n };\n\n const completionItems = session.getCompletionItems(params);\n log.debug('Requested completion items', params);\n\n const monacoCompletionItems = completionItems\n .then(items => {\n log.debug('Completion items received: ', params, items);\n\n const suggestions = items.map(item => {\n const {\n label,\n kind,\n detail,\n documentation,\n sortText,\n filterText,\n textEdit,\n insertTextFormat,\n } = item;\n\n return {\n label,\n kind: MonacoProviders.lspToMonacoKind(kind),\n detail,\n documentation:\n documentation?.kind === 'markdown'\n ? documentation\n : documentation?.value,\n sortText,\n filterText,\n insertText: textEdit.text,\n // We are basically guessing that LSP's insertTextFormat===2 is\n // semantically equivalent to monaco's insertTextRules===4.\n // Why microsoft is using almost-but-not-LSP apis is beyond me....\n insertTextRules: insertTextFormat === 2 ? 4 : insertTextFormat,\n range: MonacoProviders.lspToMonacoRange(textEdit.range),\n };\n });\n\n return {\n incomplete: true,\n suggestions,\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return { suggestions: [] };\n });\n\n return monacoCompletionItems;\n }\n\n handleSignatureRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n token: monaco.CancellationToken,\n context: monaco.languages.SignatureHelpContext\n ): monaco.languages.ProviderResult<monaco.languages.SignatureHelpResult> {\n const defaultResult: monaco.languages.SignatureHelpResult = {\n value: {\n signatures: [],\n activeSignature: 0,\n activeParameter: 0,\n },\n dispose: () => {\n /* no-op */\n },\n };\n\n const { model: propModel, session } = this.props;\n if (model !== propModel || session.getSignatureHelp == null) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n context,\n };\n\n const signatureItems = session.getSignatureHelp(params);\n log.debug('Requested signature help', params);\n\n const monacoSignatures = signatureItems\n .then(items => {\n log.debug('Signatures received: ', params, signatureItems);\n const signatures = items.map(item => {\n const { label, documentation, parameters } = item;\n\n return {\n documentation:\n documentation?.kind === 'markdown'\n ? documentation\n : documentation?.value,\n label,\n parameters: parameters ?? [],\n };\n });\n\n if (signatures.length === 0) {\n return defaultResult;\n }\n\n // For now we will assume we only autocomplete Python w/ 1 signature\n // For multiple signatures, this may need to be sent through the request as context\n const activeSignature = 0;\n\n return {\n value: {\n signatures,\n activeSignature,\n activeParameter: items[activeSignature].activeParameter,\n },\n dispose: () => {\n /* no-op */\n },\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return defaultResult;\n });\n\n return monacoSignatures;\n }\n\n handleHoverRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position\n ): monaco.languages.ProviderResult<monaco.languages.Hover> {\n const { model: propModel, session } = this.props;\n if (model !== propModel || session.getHover == null) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n };\n\n const hover = session.getHover(params);\n log.debug('Requested hover', params);\n\n const monacoHover = hover\n .then(hoverItem => {\n log.debug('Hover received: ', params, hoverItem);\n const { contents: hoverContents } = hoverItem;\n\n return {\n contents: hoverContents != null ? [hoverContents] : [],\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving hover', error);\n return { contents: [] };\n });\n\n return monacoHover;\n }\n\n render(): null {\n return null;\n }\n}\n\nexport default MonacoProviders;\n"],"mappings":"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","ignoreList":[]}
@@ -3,22 +3,39 @@
3
3
  */
4
4
  import { type Shortcut } from '@deephaven/components';
5
5
  import type { dh } from '@deephaven/jsapi-types';
6
- import * as monaco from 'monaco-editor';
7
- import type { Environment } from 'monaco-editor';
6
+ import type * as monaco from 'monaco-editor';
8
7
  import { type Language } from './lang/Language';
9
8
  declare global {
10
9
  interface Window {
11
- MonacoEnvironment?: Environment;
10
+ MonacoEnvironment?: monaco.Environment;
12
11
  }
13
12
  }
14
13
  declare class MonacoUtils {
14
+ private static loadPromise?;
15
+ private static monaco?;
16
+ private static loadCallbacks;
17
+ private static keyCodeUtils?;
18
+ private static linkProviderRegistration?;
15
19
  /**
16
- * Initializes Monaco for the environment
20
+ * Loads Monaco. Subsequent calls return the same promise.
21
+ */
22
+ static load(): Promise<typeof monaco>;
23
+ /**
24
+ * @returns Monaco, once it has loaded. Safe wherever an editor already exists.
25
+ */
26
+ static getMonaco(): typeof monaco;
27
+ /**
28
+ * Runs the callback now if Monaco has loaded, or once it has
29
+ * @param callback The callback to run
30
+ */
31
+ static whenLoaded(callback: () => void): void;
32
+ /**
33
+ * Initializes Monaco for the environment, once it has loaded
17
34
  * @param getWorker The getWorker function Monaco should use
18
35
  * The workers should be provided by the caller and bundled by their build system (e.g. Vite, Webpack)
19
36
  */
20
37
  static init({ getWorker, }?: {
21
- getWorker?: Environment['getWorker'];
38
+ getWorker?: monaco.Environment['getWorker'];
22
39
  }): void;
23
40
  /**
24
41
  * Initialize current Monaco theme based on the current DH theme.
@@ -28,7 +45,7 @@ declare class MonacoUtils {
28
45
  * Register the getWorker function for Monaco
29
46
  * @param getWorker The getWorker function for Monaco
30
47
  */
31
- static registerGetWorker(getWorker: Environment['getWorker']): void;
48
+ static registerGetWorker(getWorker: monaco.Environment['getWorker']): void;
32
49
  /**
33
50
  * Remove the hashtag prefix from a CSS color string.
34
51
  * Monaco expects colors to be the value only, no hashtag.
@@ -76,6 +93,11 @@ declare class MonacoUtils {
76
93
  */
77
94
  static disableKeyBindings(editor: monaco.editor.IStandaloneCodeEditor, keybindings: number[]): void;
78
95
  static getMonacoKeyCodeFromShortcut(shortcut: Shortcut): number;
96
+ /**
97
+ * Registers the plaintext link provider once Monaco has loaded. Providers
98
+ * are global to Monaco, so only the first call registers it.
99
+ */
100
+ static registerLinkProvider(): void;
79
101
  static provideLinks(model: monaco.editor.ITextModel): {
80
102
  links: monaco.languages.ILink[];
81
103
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MonacoUtils.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoUtils.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,OAAO,EAEL,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAUjD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAOhD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,iBAAiB,CAAC,EAAE,WAAW,CAAC;KACjC;CACF;AAED,cAAM,WAAW;IACf;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,EACV,SAAS,GACV,GAAE;QAAE,SAAS,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;KAAO,GAAG,IAAI;IAmDvD;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,IAAI;IA0KxB;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,IAAI;IAOnE;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAI5C,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAkBrD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAUjD;;;;OAIG;IACH,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,WAAW,kCAAqC,GAC/C,IAAI;IAIP;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,OAAO,EAAE,EAAE,CAAC,UAAU,GACrB,MAAM,CAAC,WAAW;IAwDrB,MAAM,CAAC,aAAa,CAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,OAAO,EAAE,EAAE,CAAC,UAAU,GACrB,IAAI;IAWP;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAC1C,IAAI;IA0BP,MAAM,CAAC,aAAa,IAAI,OAAO;IAK/B;;;;;OAKG;IACH,MAAM,CAAC,4BAA4B,IAAI,IAAI;IA2B3C;;;;;;;OAOG;IACH,MAAM,CAAC,kBAAkB,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,WAAW,EAAE,MAAM,EAAE,GACpB,IAAI;IAUP,MAAM,CAAC,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IA8B/D,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG;QACpD,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KACjC;IA2BD;;;OAGG;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,GAAG;IAIvC;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO;IAI/D;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAAG,OAAO;IAMtE;;;OAGG;WACU,cAAc,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAC1C,OAAO,CAAC,IAAI,CAAC;CAGjB;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"MonacoUtils.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoUtils.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,12 @@ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.
2
2
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
3
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
4
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
6
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
7
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
8
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
9
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
10
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
5
11
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
6
12
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
7
13
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -14,9 +20,6 @@ import throttle from 'lodash.throttle';
14
20
  import { resolveCssVariablesInRecord } from '@deephaven/components';
15
21
  import { assertNotNull } from '@deephaven/utils';
16
22
  import { find as linkifyFind } from 'linkifyjs';
17
- import * as monaco from 'monaco-editor';
18
- // @ts-ignore
19
- import { KeyCodeUtils } from 'monaco-editor/esm/vs/base/common/keyCodes.js';
20
23
  import Log from '@deephaven/log';
21
24
  import MonacoThemeRaw from "./MonacoTheme.module.css";
22
25
  import PyLang from "./lang/python.js";
@@ -29,17 +32,65 @@ var log = Log.module('MonacoUtils');
29
32
  var CONSOLE_URI_PREFIX = 'inmemory://dh-console/';
30
33
  class MonacoUtils {
31
34
  /**
32
- * Initializes Monaco for the environment
35
+ * Loads Monaco. Subsequent calls return the same promise.
36
+ */
37
+ static load() {
38
+ if (MonacoUtils.loadPromise == null) {
39
+ MonacoUtils.loadPromise = Promise.all([import('monaco-editor'),
40
+ // KeyCodeUtils is not part of Monaco's public API
41
+ // @ts-ignore
42
+ import('monaco-editor/esm/vs/base/common/keyCodes.js')]).then(_ref => {
43
+ var _ref2 = _slicedToArray(_ref, 2),
44
+ loaded = _ref2[0],
45
+ KeyCodeUtils = _ref2[1].KeyCodeUtils;
46
+ MonacoUtils.monaco = loaded;
47
+ MonacoUtils.keyCodeUtils = KeyCodeUtils;
48
+ var callbacks = MonacoUtils.loadCallbacks;
49
+ MonacoUtils.loadCallbacks = [];
50
+ callbacks.forEach(callback => callback());
51
+ return loaded;
52
+ });
53
+ }
54
+ return MonacoUtils.loadPromise;
55
+ }
56
+
57
+ /**
58
+ * @returns Monaco, once it has loaded. Safe wherever an editor already exists.
59
+ */
60
+ static getMonaco() {
61
+ assertNotNull(MonacoUtils.monaco, 'Monaco has not loaded');
62
+ return MonacoUtils.monaco;
63
+ }
64
+
65
+ /**
66
+ * Runs the callback now if Monaco has loaded, or once it has
67
+ * @param callback The callback to run
68
+ */
69
+ static whenLoaded(callback) {
70
+ if (MonacoUtils.monaco != null) {
71
+ callback();
72
+ } else {
73
+ MonacoUtils.loadCallbacks.push(callback);
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Initializes Monaco for the environment, once it has loaded
33
79
  * @param getWorker The getWorker function Monaco should use
34
80
  * The workers should be provided by the caller and bundled by their build system (e.g. Vite, Webpack)
35
81
  */
36
82
  static init() {
37
- var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
38
- getWorker = _ref.getWorker;
39
- log.debug('Initializing Monaco...');
83
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
84
+ getWorker = _ref3.getWorker;
40
85
  if (getWorker !== undefined) {
41
86
  MonacoUtils.registerGetWorker(getWorker);
42
87
  }
88
+ if (MonacoUtils.monaco == null) {
89
+ MonacoUtils.whenLoaded(() => MonacoUtils.init());
90
+ return;
91
+ }
92
+ log.debug('Initializing Monaco...');
93
+ var monaco = MonacoUtils.getMonaco();
43
94
  var initTheme = MonacoUtils.initTheme,
44
95
  registerLanguages = MonacoUtils.registerLanguages;
45
96
  initTheme();
@@ -64,6 +115,9 @@ class MonacoUtils {
64
115
  model.onDidChangeContent(() => {
65
116
  throttledLint(model);
66
117
  });
118
+ model.onWillDispose(() => {
119
+ throttledLint.cancel();
120
+ });
67
121
  }
68
122
  });
69
123
  MonacoUtils.removeConflictingKeybindings();
@@ -75,6 +129,11 @@ class MonacoUtils {
75
129
  */
76
130
  static initTheme() {
77
131
  var _MonacoTheme$logErro, _MonacoTheme$logErro2;
132
+ if (MonacoUtils.monaco == null) {
133
+ MonacoUtils.whenLoaded(() => MonacoUtils.initTheme());
134
+ return;
135
+ }
136
+ var monaco = MonacoUtils.getMonaco();
78
137
  var removeHashtag = MonacoUtils.removeHashtag;
79
138
  var MonacoTheme = resolveCssVariablesInRecord(MonacoThemeRaw);
80
139
  log.debug2('Monaco theme:', MonacoThemeRaw);
@@ -227,14 +286,19 @@ class MonacoUtils {
227
286
  return (_color$substring = color === null || color === void 0 ? void 0 : color.substring(1)) !== null && _color$substring !== void 0 ? _color$substring : '';
228
287
  }
229
288
  static registerLanguages(languages) {
289
+ if (MonacoUtils.monaco == null) {
290
+ MonacoUtils.whenLoaded(() => MonacoUtils.registerLanguages(languages));
291
+ return;
292
+ }
293
+ var monaco = MonacoUtils.getMonaco();
230
294
  // First override the default loader for any language we have a custom definition for
231
295
  // https://github.com/Microsoft/monaco-editor/issues/252#issuecomment-482786867
232
- var languageIds = languages.map(_ref2 => {
233
- var id = _ref2.id;
296
+ var languageIds = languages.map(_ref4 => {
297
+ var id = _ref4.id;
234
298
  return id;
235
299
  });
236
- monaco.languages.getLanguages().filter(_ref3 => {
237
- var id = _ref3.id;
300
+ monaco.languages.getLanguages().filter(_ref5 => {
301
+ var id = _ref5.id;
238
302
  return languageIds.includes(id);
239
303
  }).forEach(languageParam => {
240
304
  var language = languageParam;
@@ -247,6 +311,11 @@ class MonacoUtils {
247
311
  });
248
312
  }
249
313
  static registerLanguage(language) {
314
+ if (MonacoUtils.monaco == null) {
315
+ MonacoUtils.whenLoaded(() => MonacoUtils.registerLanguage(language));
316
+ return;
317
+ }
318
+ var monaco = MonacoUtils.getMonaco();
250
319
  log.debug2('Registering language: ', language.id);
251
320
  monaco.languages.register(language);
252
321
  monaco.languages.onLanguage(language.id, () => {
@@ -262,7 +331,7 @@ class MonacoUtils {
262
331
  */
263
332
  static setEOL(editor) {
264
333
  var _editor$getModel;
265
- var eolSequence = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : monaco.editor.EndOfLineSequence.LF;
334
+ var eolSequence = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : MonacoUtils.getMonaco().editor.EndOfLineSequence.LF;
266
335
  (_editor$getModel = editor.getModel()) === null || _editor$getModel === void 0 || _editor$getModel.setEOL(eolSequence);
267
336
  }
268
337
 
@@ -369,6 +438,11 @@ class MonacoUtils {
369
438
  * be impacted.
370
439
  */
371
440
  static removeConflictingKeybindings() {
441
+ if (MonacoUtils.monaco == null) {
442
+ MonacoUtils.whenLoaded(() => MonacoUtils.removeConflictingKeybindings());
443
+ return;
444
+ }
445
+ var monaco = MonacoUtils.getMonaco();
372
446
  // All editor instances share a global keybinding registry which is where
373
447
  // default keybindings are set. There doesn't appear to be a way to remove
374
448
  // default bindings, but we can add new ones that will override the existing
@@ -419,18 +493,39 @@ class MonacoUtils {
419
493
  return 0;
420
494
  }
421
495
  var isMac = MonacoUtils.isMacPlatform();
496
+ var monaco = MonacoUtils.getMonaco();
497
+ var keyCodeUtils = MonacoUtils.keyCodeUtils;
498
+ assertNotNull(keyCodeUtils, 'Monaco has not loaded');
422
499
  if (isMac) {
423
500
  return (
424
501
  // eslint-disable-next-line no-bitwise
425
- (keyState.metaKey ? monaco.KeyMod.CtrlCmd : 0) | (keyState.shiftKey ? monaco.KeyMod.Shift : 0) | (keyState.altKey ? monaco.KeyMod.Alt : 0) | (keyState.ctrlKey ? monaco.KeyMod.WinCtrl : 0) | KeyCodeUtils.fromString(keyValue)
502
+ (keyState.metaKey ? monaco.KeyMod.CtrlCmd : 0) | (keyState.shiftKey ? monaco.KeyMod.Shift : 0) | (keyState.altKey ? monaco.KeyMod.Alt : 0) | (keyState.ctrlKey ? monaco.KeyMod.WinCtrl : 0) | keyCodeUtils.fromString(keyValue)
426
503
  );
427
504
  }
428
505
  return (
429
506
  // eslint-disable-next-line no-bitwise
430
- (keyState.ctrlKey ? monaco.KeyMod.CtrlCmd : 0) | (keyState.shiftKey ? monaco.KeyMod.Shift : 0) | (keyState.altKey ? monaco.KeyMod.Alt : 0) | (keyState.metaKey ? monaco.KeyMod.WinCtrl : 0) | KeyCodeUtils.fromString(keyValue)
507
+ (keyState.ctrlKey ? monaco.KeyMod.CtrlCmd : 0) | (keyState.shiftKey ? monaco.KeyMod.Shift : 0) | (keyState.altKey ? monaco.KeyMod.Alt : 0) | (keyState.metaKey ? monaco.KeyMod.WinCtrl : 0) | keyCodeUtils.fromString(keyValue)
431
508
  );
432
509
  }
510
+
511
+ /**
512
+ * Registers the plaintext link provider once Monaco has loaded. Providers
513
+ * are global to Monaco, so only the first call registers it.
514
+ */
515
+ static registerLinkProvider() {
516
+ if (MonacoUtils.monaco == null) {
517
+ MonacoUtils.whenLoaded(() => MonacoUtils.registerLinkProvider());
518
+ return;
519
+ }
520
+ if (MonacoUtils.linkProviderRegistration != null) {
521
+ return;
522
+ }
523
+ MonacoUtils.linkProviderRegistration = MonacoUtils.getMonaco().languages.registerLinkProvider('plaintext', {
524
+ provideLinks: MonacoUtils.provideLinks
525
+ });
526
+ }
433
527
  static provideLinks(model) {
528
+ var monaco = MonacoUtils.getMonaco();
434
529
  var newTokens = [];
435
530
  var _loop = function _loop(i) {
436
531
  var lineText = model.getLineContent(i);
@@ -462,7 +557,7 @@ class MonacoUtils {
462
557
  * @returns A new console URI
463
558
  */
464
559
  static generateConsoleUri() {
465
- return monaco.Uri.parse("".concat(CONSOLE_URI_PREFIX).concat(nanoid()));
560
+ return MonacoUtils.getMonaco().Uri.parse("".concat(CONSOLE_URI_PREFIX).concat(nanoid()));
466
561
  }
467
562
 
468
563
  /**
@@ -495,5 +590,10 @@ class MonacoUtils {
495
590
  })();
496
591
  }
497
592
  }
593
+ _defineProperty(MonacoUtils, "loadPromise", void 0);
594
+ _defineProperty(MonacoUtils, "monaco", void 0);
595
+ _defineProperty(MonacoUtils, "loadCallbacks", []);
596
+ _defineProperty(MonacoUtils, "keyCodeUtils", void 0);
597
+ _defineProperty(MonacoUtils, "linkProviderRegistration", void 0);
498
598
  export default MonacoUtils;
499
599
  //# sourceMappingURL=MonacoUtils.js.map