@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.
- package/dist/ConsoleInput.d.ts +13 -6
- package/dist/ConsoleInput.d.ts.map +1 -1
- package/dist/ConsoleInput.js +95 -62
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/common/Code.d.ts.map +1 -1
- package/dist/common/Code.js +24 -2
- package/dist/common/Code.js.map +1 -1
- package/dist/log/LogView.d.ts +3 -4
- package/dist/log/LogView.d.ts.map +1 -1
- package/dist/log/LogView.js +34 -35
- package/dist/log/LogView.js.map +1 -1
- package/dist/monaco/MonacoProviders.d.ts +1 -1
- package/dist/monaco/MonacoProviders.d.ts.map +1 -1
- package/dist/monaco/MonacoProviders.js +11 -3
- package/dist/monaco/MonacoProviders.js.map +1 -1
- package/dist/monaco/MonacoUtils.d.ts +28 -6
- package/dist/monaco/MonacoUtils.d.ts.map +1 -1
- package/dist/monaco/MonacoUtils.js +115 -15
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/monaco/RuffSettingsModal.d.ts.map +1 -1
- package/dist/monaco/RuffSettingsModal.js +45 -30
- package/dist/monaco/RuffSettingsModal.js.map +1 -1
- package/dist/notebook/Editor.d.ts +5 -3
- package/dist/notebook/Editor.d.ts.map +1 -1
- package/dist/notebook/Editor.js +61 -44
- package/dist/notebook/Editor.js.map +1 -1
- package/package.json +2 -2
|
@@ -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":";;;;;AAAA;AACA;AACA;AACA,SAASA,aAAa,QAAQ,OAAO;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,OAAOC,IAAI,IAAIC,SAAS,QAAyB,0BAA0B;AAAC,OACrEC,qBAAqB;AAAA,OACrBC,WAAW;AAElB,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAM,CAAC,0BAA0B,CAAC;AAQlD;AACA;AACA;AACA,MAAMC,eAAe,SAAST,aAAa,CAGzC;EAWA;AACF;AACA;AACA;EACE,OAAaU,QAAQA,CAAA,EAAkB;IAAA,OAAAC,iBAAA;MACrC,IAAI,CAACF,eAAe,CAACG,aAAa,EAAE;QAClC;MACF;MACA,IAAIH,eAAe,CAACI,eAAe,EAAE;QACnC,OAAOJ,eAAe,CAACI,eAAe;MACxC;MAEAJ,eAAe,CAACI,eAAe,GAAGV,IAAI,CAAC,CAAC,CAAC,CAAC,CAACW,IAAI,CAAC,MAAM;QACpDP,GAAG,CAACQ,KAAK,CAAC,kBAAkB,EAAEX,SAAS,CAACY,OAAO,CAAC,CAAC,CAAC;QAClDP,eAAe,CAACQ,iBAAiB,GAAG,IAAI;QACxCR,eAAe,CAACS,mBAAmB,CAAC,CAAC;MACvC,CAAC,CAAC;MAEF,OAAOT,eAAe,CAACI,eAAe;IAAC;EACzC;;EAEA;AACF;AACA;AACA;EACE,OAAOK,mBAAmBA,CAAA,EAAS;IACjC,IAAI,CAACT,eAAe,CAACQ,iBAAiB,EAAE;MACtC;IACF;;IAEA;IACA,IAAME,OAAO,GAAGC,OAAO,CAACb,GAAG;IAC3B,IAAI;MACFa,OAAO,CAACb,GAAG,GAAG,MAAMc,SAAS,CAAC,CAAC;MAC/BZ,eAAe,CAACa,aAAa,GAAG,IAAIlB,SAAS,CAC3CK,eAAe,CAACc,YAClB,CAAC;IACH,CAAC,SAAS;MACRH,OAAO,CAACb,GAAG,GAAGY,OAAO,CAAC,CAAC;IACzB;IACA;;IAEAV,eAAe,CAACe,aAAa,CAAC,CAAC;EACjC;;EAEA;AACF;AACA;AACA;EACE,OAAOC,eAAeA,CAAA,EAEd;IAAA,IADNC,QAAiC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAN,SAAA,GAAAM,SAAA,MAAGlB,eAAe,CAACc,YAAY;IAEhEd,eAAe,CAACc,YAAY,GAAGG,QAAQ;IAEvC,IAAI,CAACjB,eAAe,CAACQ,iBAAiB,EAAE;MACtCR,eAAe,CAACC,QAAQ,CAAC,CAAC;MAC1B;IACF;IAEAD,eAAe,CAACS,mBAAmB,CAAC,CAAC;EACvC;EAEA,OAAOW,cAAcA,CAACC,KAA+B,EAAgB;IACnE,IAAI,CAACrB,eAAe,CAACa,aAAa,EAAE;MAClC,OAAO,EAAE;IACX;IAEA,IAAMS,WAAW,GAAGtB,eAAe,CAACa,aAAa,CAACU,KAAK,CACrDF,KAAK,CAACG,QAAQ,CAAC,CACjB,CAAiB;IACjB,IAAI3B,WAAW,CAAC4B,cAAc,CAACJ,KAAK,CAAC,EAAE;MACrC;MACA,OAAOC,WAAW,CAACI,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,IAAI,IAAI,CAAC;IAChD;IACA,OAAON,WAAW;EACpB;EAEA,OAAOP,aAAaA,CAAA,EAAS;IAC3B,IAAI,CAACf,eAAe,CAACG,aAAa,EAAE;MAClCX,MAAM,CAACqC,MAAM,CAACC,gBAAgB,CAAC,MAAM,CAAC;MACtC;IACF;IAEAtC,MAAM,CAACqC,MAAM,CACVE,SAAS,CAAC,CAAC,CACXL,MAAM,CAACM,CAAC,IAAIA,CAAC,CAACC,aAAa,CAAC,CAAC,KAAK,QAAQ,CAAC,CAC3CC,OAAO,CAAClC,eAAe,CAACmC,UAAU,CAAC;EACxC;EAEA,OAAOA,UAAUA,CAACd,KAA+B,EAAQ;IACvD,IAAI,CAACrB,eAAe,CAACG,aAAa,EAAE;MAClC;IACF;IAEA,IAAI,CAACH,eAAe,CAACa,aAAa,EAAE;MAClC;IACF;IAEA,IAAMS,WAAW,GAAGtB,eAAe,CAACoB,cAAc,CAACC,KAAK,CAAC;IACzDvB,GAAG,CAACQ,KAAK,6BAAA8B,MAAA,CAA6Bf,KAAK,CAACgB,GAAG,CAACC,QAAQ,CAAC,CAAC,GAAIhB,WAAW,CAAC;IAE1E9B,MAAM,CAACqC,MAAM,CAACU,eAAe,CAC3BlB,KAAK,EACL,MAAM,EACNC,WAAW,CAACkB,GAAG,CAAEb,CAAa,IAAK;MACjC;MACA,IAAMc,aAAa,GAAGd,CAAC,CAACC,IAAI,KAAK,MAAM,IAAID,CAAC,CAACC,IAAI,KAAK,MAAM;MAC5D,IAAMc,aAAa,GAAGf,CAAC,CAACC,IAAI,IAAI,IAAI,CAAC,CAAC;MACtC,OAAO;QACLe,eAAe,EAAEhB,CAAC,CAACiB,QAAQ,CAACC,GAAG;QAC/BC,WAAW,EAAEnB,CAAC,CAACiB,QAAQ,CAACG,MAAM;QAC9BC,aAAa,EAAErB,CAAC,CAACsB,YAAY,CAACJ,GAAG;QACjCK,SAAS,EAAEvB,CAAC,CAACsB,YAAY,CAACF,MAAM;QAChCI,OAAO,EAAET,aAAa,GAAGf,CAAC,CAACwB,OAAO,MAAAf,MAAA,CAAMT,CAAC,CAACC,IAAI,QAAAQ,MAAA,CAAKT,CAAC,CAACwB,OAAO,CAAE;QAC9DC,QAAQ,EAAEV,aAAa,GACnBlD,MAAM,CAAC6D,cAAc,CAACC,KAAK,GAC3B9D,MAAM,CAAC6D,cAAc,CAACE,OAAO;QACjCC,IAAI,EAAEf,aAAa,GAAG,CAACjD,MAAM,CAACiE,SAAS,CAACC,WAAW,CAAC,GAAG;MACzD,CAAC;IACH,CAAC,CACH,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOC,eAAeA,CAACC,IAAwB,EAAU;IACvD,IAAMC,WAAW,GAAGrE,MAAM,CAACsE,SAAS,CAACC,kBAAkB;IACvD,QAAQH,IAAI;MACV,KAAK,CAAC;QACJ,OAAOC,WAAW,CAACG,IAAI;MACzB,KAAK,CAAC;QACJ,OAAOH,WAAW,CAACI,MAAM;MAC3B,KAAK,CAAC;QACJ,OAAOJ,WAAW,CAACK,QAAQ;MAC7B,KAAK,CAAC;QACJ,OAAOL,WAAW,CAACM,WAAW;MAChC,KAAK,CAAC;QACJ,OAAON,WAAW,CAACO,KAAK;MAC1B,KAAK,CAAC;QACJ,OAAOP,WAAW,CAACQ,QAAQ;MAC7B,KAAK,CAAC;QACJ,OAAOR,WAAW,CAACS,KAAK;MAC1B,KAAK,CAAC;QACJ,OAAOT,WAAW,CAACU,SAAS;MAC9B,KAAK,CAAC;QACJ,OAAOV,WAAW,CAACW,MAAM;MAC3B,KAAK,EAAE;QACL,OAAOX,WAAW,CAACY,QAAQ;MAC7B,KAAK,EAAE;QACL,OAAOZ,WAAW,CAACa,IAAI;MACzB,KAAK,EAAE;QACL,OAAOb,WAAW,CAACc,KAAK;MAC1B,KAAK,EAAE;QACL,OAAOd,WAAW,CAACe,IAAI;MACzB,KAAK,EAAE;QACL,OAAOf,WAAW,CAACgB,OAAO;MAC5B,KAAK,EAAE;QACL,OAAOhB,WAAW,CAACiB,OAAO;MAC5B,KAAK,EAAE;QACL,OAAOjB,WAAW,CAACkB,KAAK;MAC1B,KAAK,EAAE;QACL,OAAOlB,WAAW,CAACmB,IAAI;MACzB,KAAK,EAAE;QACL,OAAOnB,WAAW,CAACoB,SAAS;MAC9B,KAAK,EAAE;QACL,OAAOpB,WAAW,CAACqB,MAAM;MAC3B,KAAK,EAAE;QACL,OAAOrB,WAAW,CAACsB,UAAU;MAC/B,KAAK,EAAE;QACL,OAAOtB,WAAW,CAACuB,QAAQ;MAC7B,KAAK,EAAE;QACL,OAAOvB,WAAW,CAACwB,MAAM;MAC3B,KAAK,EAAE;QACL,OAAOxB,WAAW,CAACyB,KAAK;MAC1B,KAAK,EAAE;QACL,OAAOzB,WAAW,CAAC0B,QAAQ;MAC7B,KAAK,EAAE;QACL,OAAO1B,WAAW,CAAC2B,aAAa;MAClC;QACE,OAAO3B,WAAW,CAACQ,QAAQ;IAC/B;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAOoB,gBAAgBA,CAACC,KAAmB,EAAiB;IAC1D,IAAQC,KAAK,GAAUD,KAAK,CAApBC,KAAK;MAAEC,GAAG,GAAKF,KAAK,CAAbE,GAAG;;IAElB;IACA,OAAO;MACLjD,eAAe,EAAEgD,KAAK,CAACE,IAAI,GAAG,CAAC;MAC/B/C,WAAW,EAAE6C,KAAK,CAACG,SAAS,GAAG,CAAC;MAChC9C,aAAa,EAAE4C,GAAG,CAACC,IAAI,GAAG,CAAC;MAC3B3C,SAAS,EAAE0C,GAAG,CAACE,SAAS,GAAG;IAC7B,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAOC,mBAAmBA,CACxBC,QAA0B,EACmB;IAC7C;IACA,OAAO;MACLH,IAAI,EAAEG,QAAQ,CAACC,UAAU,GAAG,CAAC;MAC7BH,SAAS,EAAEE,QAAQ,CAACjD,MAAM,GAAG;IAC/B,CAAC;EACH;EAEA,OAAOmD,6BAA6BA,CAClC7E,KAA+B,EAC/BqE,KAAmB,EAC+C;IAClE,IAAI,CAAC1F,eAAe,CAACG,aAAa,IAAI,CAACH,eAAe,CAACa,aAAa,EAAE;MACpE,OAAO;QACLsF,OAAO,EAAE,EAAE;QACXC,OAAO,EAAEA,CAAA,KAAM;UACb;QAAA;MAEJ,CAAC;IACH;IAEA,IAAM9E,WAAW,GAAGtB,eAAe,CAACoB,cAAc,CAACC,KAAK,CAAC,CAACK,MAAM,CAACC,CAAC,IAAI;MACpE,IAAM0E,eAAe,GAAG,IAAI7G,MAAM,CAAC8G,KAAK,CACtC3E,CAAC,CAACiB,QAAQ,CAACC,GAAG,EACdlB,CAAC,CAACiB,QAAQ,CAACG,MAAM,EACjBpB,CAAC,CAACsB,YAAY,CAACJ,GAAG,EAClBlB,CAAC,CAACsB,YAAY,CAACF,MACjB,CAAC;MACD,OACEpB,CAAC,CAACC,IAAI,IAAI,IAAI;MAAI;MAClByE,eAAe,CAACE,eAAe,CAACb,KAAK,CAAC;IAE1C,CAAC,CAAC;IAEF,IAAMc,UAAyC,GAAGlF,WAAW,CAC1DI,MAAM,CAAC+E,IAAA;MAAA,IAAGC,GAAG,GAAAD,IAAA,CAAHC,GAAG;MAAA,OAAOA,GAAG,IAAI,IAAI;IAAA,EAAC,CAChClE,GAAG,CAACb,CAAC,IAAI;MACR,IAAIgF,KAAK,GAAG,KAAK;MACjB,IAAIhF,CAAC,CAAC+E,GAAG,IAAI,IAAI,EAAE;QACjB,IAAI/E,CAAC,CAAC+E,GAAG,CAACvD,OAAO,IAAI,IAAI,IAAIxB,CAAC,CAAC+E,GAAG,CAACvD,OAAO,KAAK,EAAE,EAAE;UACjDwD,KAAK,MAAAvE,MAAA,CAAMT,CAAC,CAACC,IAAI,QAAAQ,MAAA,CAAKT,CAAC,CAAC+E,GAAG,CAACvD,OAAO,CAAE;QACvC,CAAC,MAAM;UACLwD,KAAK,UAAAvE,MAAA,CAAUT,CAAC,CAACC,IAAI,CAAE;QACzB;MACF;MACA,OAAO;QACL+E,KAAK;QACLC,EAAE,SAAAxE,MAAA,CAAST,CAAC,CAACC,IAAI,CAAE;QACnBgC,IAAI,EAAE,UAAU;QAChBiD,IAAI,EAAElF,CAAC,CAAC+E,GAAG,GACP;UACEI,KAAK,EAAEnF,CAAC,CAAC+E,GAAG,CAACI,KAAK,CAACtE,GAAG,CAACqE,IAAI;YAAA,IAAAE,aAAA;YAAA,OAAK;cAC9BC,QAAQ,EAAE3F,KAAK,CAACgB,GAAG;cACnB4E,SAAS,EAAE5F,KAAK,CAAC6F,YAAY,CAAC,CAAC;cAC/BC,QAAQ,EAAE;gBACRzB,KAAK,EAAE;kBACL/C,eAAe,EAAEkE,IAAI,CAACjE,QAAQ,CAACC,GAAG;kBAClCC,WAAW,EAAE+D,IAAI,CAACjE,QAAQ,CAACG,MAAM;kBACjCC,aAAa,EAAE6D,IAAI,CAAC5D,YAAY,CAACJ,GAAG;kBACpCK,SAAS,EAAE2D,IAAI,CAAC5D,YAAY,CAACF;gBAC/B,CAAC;gBACDqE,IAAI,GAAAL,aAAA,GAAEF,IAAI,CAACQ,OAAO,cAAAN,aAAA,cAAAA,aAAA,GAAI;cACxB;YACF,CAAC;UAAA,CAAC;QACJ,CAAC,GACDnG;MACN,CAAC;IACH,CAAC,CAAC;IAEJ,IAAM0G,SAAS,GAAG,IAAIC,GAAG,CAAS,CAAC;IACnC,IAAMC,cAAc,GAAG,IAAID,GAAG,CAAS,CAAC;IACxCjG,WAAW,CAACY,OAAO,CAACP,CAAC,IAAI;MACvB,IAAIA,CAAC,CAACC,IAAI,IAAI,IAAI,EAAE;QAClB;MACF;MACA,IAAI0F,SAAS,CAACG,GAAG,CAAC9F,CAAC,CAACC,IAAI,CAAC,EAAE;QACzB4F,cAAc,CAACE,GAAG,CAAC/F,CAAC,CAACC,IAAI,CAAC;MAC5B;MACA0F,SAAS,CAACI,GAAG,CAAC/F,CAAC,CAACC,IAAI,CAAC;IACvB,CAAC,CAAC;IAEF,IAAM+F,kBAAiD,GAAGrG,WAAW,CAClEkB,GAAG,CAACb,CAAC,IAAI;MACR,IAAIA,CAAC,CAACC,IAAI,IAAI,IAAI,EAAE;QAClB;QACA,OAAO,EAAE;MACX;MACA,IAAMiE,IAAI,GAAGxE,KAAK,CAACuG,cAAc,CAACjG,CAAC,CAACiB,QAAQ,CAACC,GAAG,CAAC;MACjD,IAAMgF,SAAS,GAAGrI,MAAM,CAACqC,MAAM,CAC5BiG,QAAQ,CAACjC,IAAI,EAAExE,KAAK,CAACY,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACxC8F,EAAE,CAAC,CAAC,CAAC,CAAC;MACT,IAAMC,QAAQ,GAAG;QACftC,KAAK,EAAE;UACL/C,eAAe,EAAEhB,CAAC,CAACiB,QAAQ,CAACC,GAAG;UAC/BC,WAAW,EAAE+C,IAAI,CAAC1E,MAAM,GAAG,CAAC;UAC5B6B,aAAa,EAAErB,CAAC,CAACiB,QAAQ,CAACC,GAAG;UAC7BK,SAAS,EAAE2C,IAAI,CAAC1E,MAAM,GAAG;QAC3B,CAAC;QACDiG,IAAI,cAAAhF,MAAA,CAAcT,CAAC,CAACC,IAAI;MAC1B,CAAC;MACD,IAAIiG,SAAS,IAAI,IAAI,IAAIA,SAAS,CAACI,IAAI,CAACC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC7D;QACAF,QAAQ,CAACZ,IAAI,cAAAhF,MAAA,CAAcT,CAAC,CAACC,IAAI,MAAG;QACpC,IAAIiE,IAAI,CAACqC,UAAU,CAAC,SAAS,EAAEL,SAAS,CAACM,MAAM,CAAC,EAAE;UAChD;UACAH,QAAQ,CAACtC,KAAK,CAAC5C,WAAW,GAAG+E,SAAS,CAACM,MAAM,GAAG,CAAC;UACjDH,QAAQ,CAACtC,KAAK,CAACxC,SAAS,GAAG2E,SAAS,CAACM,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC,MAAM;UACLH,QAAQ,CAACtC,KAAK,CAAC5C,WAAW,GAAG+E,SAAS,CAACM,MAAM,GAAG,CAAC;UACjDH,QAAQ,CAACtC,KAAK,CAACxC,SAAS,GAAG2C,IAAI,CAACqC,UAAU,CAAC,IAAI,EAAEL,SAAS,CAACM,MAAM,CAAC,GAC9DN,SAAS,CAACM,MAAM,GAAG,CAAC,CAAC;UAAA,EACrBN,SAAS,CAACM,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5B;MACF;MACA,OAAO,CACL;QACExB,KAAK,aAAAvE,MAAA,CAAaT,CAAC,CAACC,IAAI,WAAAQ,MAAA,CACtBoF,cAAc,CAACC,GAAG,CAAC9F,CAAC,CAACC,IAAI,CAAC,WAAAQ,MAAA,CACdT,CAAC,CAACiB,QAAQ,CAACC,GAAG,IACtB,WAAW,CACf;QACFe,IAAI,EAAE,UAAU;QAChBiD,IAAI,EAAE;UACJC,KAAK,EAAE,CACL;YACEE,QAAQ,EAAE3F,KAAK,CAACgB,GAAG;YACnB4E,SAAS,EAAE5F,KAAK,CAAC6F,YAAY,CAAC,CAAC;YAC/BC,QAAQ,EAAEa;UACZ,CAAC;QAEL;MACF,CAAC,CACF;IACH,CAAC,CAAC,CACDI,IAAI,CAAC,CAAC,CACN1G,MAAM;IACL;IACA,CAAC2G,MAAM,EAAEC,CAAC,EAAEC,GAAG,KAAKA,GAAG,CAACC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAAC9B,KAAK,KAAK0B,MAAM,CAAC1B,KAAK,CAAC,KAAK0B,MAClE,CAAC;IAEH,IAAMK,oBAAmD,GAAG,CAC1D,GAAGpB,SAAS,CACb,CAAC9E,GAAG,CAACZ,IAAI,KAAK;MACb+E,KAAK,aAAAvE,MAAA,CAAaR,IAAI,mBAAgB;MACtCgC,IAAI,EAAE,UAAU;MAChBiD,IAAI,EAAE;QACJC,KAAK,EAAE,CACL;UACEE,QAAQ,EAAE3F,KAAK,CAACgB,GAAG;UACnB4E,SAAS,EAAE5F,KAAK,CAAC6F,YAAY,CAAC,CAAC;UAC/BC,QAAQ,EAAE;YACRzB,KAAK,EAAE;cACL/C,eAAe,EAAE,CAAC;cAClBG,WAAW,EAAE,CAAC;cACdE,aAAa,EAAE,CAAC;cAChBE,SAAS,EAAE;YACb,CAAC;YACDkE,IAAI,mBAAAhF,MAAA,CAAmBR,IAAI;UAC7B;QACF,CAAC;MAEL;IACF,CAAC,CAAC,CAAC;IAEH,OAAO;MACLuE,OAAO,EAAE,CAAC,GAAGK,UAAU,EAAE,GAAGmB,kBAAkB,EAAE,GAAGe,oBAAoB,CAAC;MACxEtC,OAAO,EAAEA,CAAA,KAAM;QACb;MAAA;IAEJ,CAAC;EACH;EAEA,OAAOuC,yBAAyBA,CAC9BtH,KAA+B,EAC/BuH,OAA2C,EAC3CC,KAA+B,EAC+B;IAC9D,IAAI,CAAC7I,eAAe,CAACa,aAAa,EAAE;MAClC;IACF;IAEAf,GAAG,CAACQ,KAAK,gCAAA8B,MAAA,CAAgCf,KAAK,CAACgB,GAAG,CAACC,QAAQ,CAAE,CAAC;IAE9D,OAAO,CACL;MACEoD,KAAK,EAAErE,KAAK,CAACyH,iBAAiB,CAAC,CAAC;MAChC1B,IAAI,EAAEpH,eAAe,CAACa,aAAa,CAACkI,MAAM,CAAC1H,KAAK,CAACG,QAAQ,CAAC,CAAC;IAC7D,CAAC,CACF;EACH;EAEAwH,WAAWA,CAACC,KAA0B,EAAE;IACtC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAEb,IAAI,CAACC,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACC,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACC,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACD,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACE,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACF,IAAI,CAAC,IAAI,CAAC;EAC9D;EAEAG,iBAAiBA,CAAA,EAAS;IACxB,IAAAC,WAAA,GAA8B,IAAI,CAACP,KAAK;MAAhCQ,QAAQ,GAAAD,WAAA,CAARC,QAAQ;MAAEC,OAAO,GAAAF,WAAA,CAAPE,OAAO;IAEzB,IAAI,CAACC,4BAA4B,GAC/BnK,MAAM,CAACsE,SAAS,CAAC8F,8BAA8B,CAACH,QAAQ,EAAE;MACxDI,sBAAsB,EAAE,IAAI,CAACV,uBAAuB;MACpDW,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;IACnC,CAAC,CAAC;IAEJ,IAAIJ,OAAO,CAACK,gBAAgB,IAAI,IAAI,EAAE;MACpC,IAAI,CAACC,2BAA2B,GAC9BxK,MAAM,CAACsE,SAAS,CAACmG,6BAA6B,CAACR,QAAQ,EAAE;QACvDS,oBAAoB,EAAE,IAAI,CAACb,sBAAsB;QACjDc,8BAA8B,EAAE,CAAC,GAAG,EAAE,GAAG;MAC3C,CAAC,CAAC;IACN;IAEA,IAAIT,OAAO,CAACU,QAAQ,IAAI,IAAI,EAAE;MAC5B,IAAI,CAACC,uBAAuB,GAAG7K,MAAM,CAACsE,SAAS,CAACwG,qBAAqB,CACnEb,QAAQ,EACR;QACEc,YAAY,EAAE,IAAI,CAACjB;MACrB,CACF,CAAC;IACH;EACF;EAEAkB,oBAAoBA,CAAA,EAAS;IAAA,IAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA;IAC3B,CAAAF,qBAAA,OAAI,CAACd,4BAA4B,cAAAc,qBAAA,eAAjCA,qBAAA,CAAmCrE,OAAO,CAAC,CAAC;IAC5C,CAAAsE,qBAAA,OAAI,CAACV,2BAA2B,cAAAU,qBAAA,eAAhCA,qBAAA,CAAkCtE,OAAO,CAAC,CAAC;IAC3C,CAAAuE,qBAAA,OAAI,CAACN,uBAAuB,cAAAM,qBAAA,eAA5BA,qBAAA,CAA8BvE,OAAO,CAAC,CAAC;EACzC;EAQA+C,uBAAuBA,CACrB9H,KAA+B,EAC/B2E,QAAyB,EACzB4E,OAA2C,EACuB;IAClE,IAAAC,YAAA,GAAsC,IAAI,CAAC5B,KAAK;MAAjC6B,SAAS,GAAAD,YAAA,CAAhBxJ,KAAK;MAAaqI,OAAO,GAAAmB,YAAA,CAAPnB,OAAO;IACjC,IAAIrI,KAAK,KAAKyJ,SAAS,EAAE;MACvB,OAAO,IAAI;IACb;IAEA,IAAMC,MAAM,GAAG;MACbC,YAAY,EAAE;QACZ3I,GAAG,KAAAD,MAAA,CAAKf,KAAK,CAACgB,GAAG,CAAE;QACnB9B,OAAO,EAAEc,KAAK,CAAC6F,YAAY,CAAC;MAC9B,CAAC;MACDlB,QAAQ,EAAEhG,eAAe,CAAC+F,mBAAmB,CAACC,QAAQ,CAAC;MACvD4E;IACF,CAAC;IAED,IAAMK,eAAe,GAAGvB,OAAO,CAACwB,kBAAkB,CAACH,MAAM,CAAC;IAC1DjL,GAAG,CAACQ,KAAK,CAAC,4BAA4B,EAAEyK,MAAM,CAAC;IAE/C,IAAMI,qBAAqB,GAAGF,eAAe,CAC1C5K,IAAI,CAAC+K,KAAK,IAAI;MACbtL,GAAG,CAACQ,KAAK,CAAC,6BAA6B,EAAEyK,MAAM,EAAEK,KAAK,CAAC;MAEvD,IAAMC,WAAW,GAAGD,KAAK,CAAC5I,GAAG,CAAC8I,IAAI,IAAI;QACpC,IACEC,KAAK,GAQHD,IAAI,CARNC,KAAK;UACL3H,IAAI,GAOF0H,IAAI,CAPN1H,IAAI;UACJ4H,MAAM,GAMJF,IAAI,CANNE,MAAM;UACNC,aAAa,GAKXH,IAAI,CALNG,aAAa;UACbC,QAAQ,GAINJ,IAAI,CAJNI,QAAQ;UACRC,UAAU,GAGRL,IAAI,CAHNK,UAAU;UACVxE,QAAQ,GAENmE,IAAI,CAFNnE,QAAQ;UACRyE,gBAAgB,GACdN,IAAI,CADNM,gBAAgB;QAGlB,OAAO;UACLL,KAAK;UACL3H,IAAI,EAAE5D,eAAe,CAAC2D,eAAe,CAACC,IAAI,CAAC;UAC3C4H,MAAM;UACNC,aAAa,EACX,CAAAA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAE7H,IAAI,MAAK,UAAU,GAC9B6H,aAAa,GACbA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEI,KAAK;UAC1BH,QAAQ;UACRC,UAAU;UACVG,UAAU,EAAE3E,QAAQ,CAACC,IAAI;UACzB;UACA;UACA;UACA2E,eAAe,EAAEH,gBAAgB,KAAK,CAAC,GAAG,CAAC,GAAGA,gBAAgB;UAC9DlG,KAAK,EAAE1F,eAAe,CAACyF,gBAAgB,CAAC0B,QAAQ,CAACzB,KAAK;QACxD,CAAC;MACH,CAAC,CAAC;MAEF,OAAO;QACLsG,UAAU,EAAE,IAAI;QAChBX;MACF,CAAC;IACH,CAAC,CAAC,CACDY,KAAK,CAAEC,KAAc,IAAK;MACzBpM,GAAG,CAACoM,KAAK,CAAC,gDAAgD,EAAEA,KAAK,CAAC;MAClE,OAAO;QAAEb,WAAW,EAAE;MAAG,CAAC;IAC5B,CAAC,CAAC;IAEJ,OAAOF,qBAAqB;EAC9B;EAEA9B,sBAAsBA,CACpBhI,KAA+B,EAC/B2E,QAAyB,EACzB6C,KAA+B,EAC/B+B,OAA8C,EACyB;IACvE,IAAMuB,aAAmD,GAAG;MAC1DN,KAAK,EAAE;QACLO,UAAU,EAAE,EAAE;QACdC,eAAe,EAAE,CAAC;QAClBC,eAAe,EAAE;MACnB,CAAC;MACDlG,OAAO,EAAEA,CAAA,KAAM;QACb;MAAA;IAEJ,CAAC;IAED,IAAAmG,YAAA,GAAsC,IAAI,CAACtD,KAAK;MAAjC6B,SAAS,GAAAyB,YAAA,CAAhBlL,KAAK;MAAaqI,OAAO,GAAA6C,YAAA,CAAP7C,OAAO;IACjC,IAAIrI,KAAK,KAAKyJ,SAAS,IAAIpB,OAAO,CAACK,gBAAgB,IAAI,IAAI,EAAE;MAC3D,OAAO,IAAI;IACb;IAEA,IAAMgB,MAAM,GAAG;MACbC,YAAY,EAAE;QACZ3I,GAAG,KAAAD,MAAA,CAAKf,KAAK,CAACgB,GAAG,CAAE;QACnB9B,OAAO,EAAEc,KAAK,CAAC6F,YAAY,CAAC;MAC9B,CAAC;MACDlB,QAAQ,EAAEhG,eAAe,CAAC+F,mBAAmB,CAACC,QAAQ,CAAC;MACvD4E;IACF,CAAC;IAED,IAAM4B,cAAc,GAAG9C,OAAO,CAACK,gBAAgB,CAACgB,MAAM,CAAC;IACvDjL,GAAG,CAACQ,KAAK,CAAC,0BAA0B,EAAEyK,MAAM,CAAC;IAE7C,IAAM0B,gBAAgB,GAAGD,cAAc,CACpCnM,IAAI,CAAC+K,KAAK,IAAI;MACbtL,GAAG,CAACQ,KAAK,CAAC,uBAAuB,EAAEyK,MAAM,EAAEyB,cAAc,CAAC;MAC1D,IAAMJ,UAAU,GAAGhB,KAAK,CAAC5I,GAAG,CAAC8I,IAAI,IAAI;QACnC,IAAQC,KAAK,GAAgCD,IAAI,CAAzCC,KAAK;UAAEE,aAAa,GAAiBH,IAAI,CAAlCG,aAAa;UAAEiB,UAAU,GAAKpB,IAAI,CAAnBoB,UAAU;QAExC,OAAO;UACLjB,aAAa,EACX,CAAAA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAE7H,IAAI,MAAK,UAAU,GAC9B6H,aAAa,GACbA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEI,KAAK;UAC1BN,KAAK;UACLmB,UAAU,EAAEA,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI;QAC5B,CAAC;MACH,CAAC,CAAC;MAEF,IAAIN,UAAU,CAACjL,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAOgL,aAAa;MACtB;;MAEA;MACA;MACA,IAAME,eAAe,GAAG,CAAC;MAEzB,OAAO;QACLR,KAAK,EAAE;UACLO,UAAU;UACVC,eAAe;UACfC,eAAe,EAAElB,KAAK,CAACiB,eAAe,CAAC,CAACC;QAC1C,CAAC;QACDlG,OAAO,EAAEA,CAAA,KAAM;UACb;QAAA;MAEJ,CAAC;IACH,CAAC,CAAC,CACD6F,KAAK,CAAEC,KAAc,IAAK;MACzBpM,GAAG,CAACoM,KAAK,CAAC,gDAAgD,EAAEA,KAAK,CAAC;MAClE,OAAOC,aAAa;IACtB,CAAC,CAAC;IAEJ,OAAOM,gBAAgB;EACzB;EAEAnD,kBAAkBA,CAChBjI,KAA+B,EAC/B2E,QAAyB,EACgC;IACzD,IAAA2G,YAAA,GAAsC,IAAI,CAAC1D,KAAK;MAAjC6B,SAAS,GAAA6B,YAAA,CAAhBtL,KAAK;MAAaqI,OAAO,GAAAiD,YAAA,CAAPjD,OAAO;IACjC,IAAIrI,KAAK,KAAKyJ,SAAS,IAAIpB,OAAO,CAACU,QAAQ,IAAI,IAAI,EAAE;MACnD,OAAO,IAAI;IACb;IAEA,IAAMW,MAAM,GAAG;MACbC,YAAY,EAAE;QACZ3I,GAAG,KAAAD,MAAA,CAAKf,KAAK,CAACgB,GAAG,CAAE;QACnB9B,OAAO,EAAEc,KAAK,CAAC6F,YAAY,CAAC;MAC9B,CAAC;MACDlB,QAAQ,EAAEhG,eAAe,CAAC+F,mBAAmB,CAACC,QAAQ;IACxD,CAAC;IAED,IAAM4G,KAAK,GAAGlD,OAAO,CAACU,QAAQ,CAACW,MAAM,CAAC;IACtCjL,GAAG,CAACQ,KAAK,CAAC,iBAAiB,EAAEyK,MAAM,CAAC;IAEpC,IAAM8B,WAAW,GAAGD,KAAK,CACtBvM,IAAI,CAACyM,SAAS,IAAI;MACjBhN,GAAG,CAACQ,KAAK,CAAC,kBAAkB,EAAEyK,MAAM,EAAE+B,SAAS,CAAC;MAChD,IAAkBC,aAAa,GAAKD,SAAS,CAArCE,QAAQ;MAEhB,OAAO;QACLA,QAAQ,EAAED,aAAa,IAAI,IAAI,GAAG,CAACA,aAAa,CAAC,GAAG;MACtD,CAAC;IACH,CAAC,CAAC,CACDd,KAAK,CAAEC,KAAc,IAAK;MACzBpM,GAAG,CAACoM,KAAK,CAAC,qCAAqC,EAAEA,KAAK,CAAC;MACvD,OAAO;QAAEc,QAAQ,EAAE;MAAG,CAAC;IACzB,CAAC,CAAC;IAEJ,OAAOH,WAAW;EACpB;EAEAI,MAAMA,CAAA,EAAS;IACb,OAAO,IAAI;EACb;AACF;AAAC/D,eAAA,CAhpBKlJ,eAAe;AAAAkJ,eAAA,CAAflJ,eAAe;AAAAkJ,eAAA,CAAflJ,eAAe,uBAQQ,KAAK;AAAAkJ,eAAA,CAR5BlJ,eAAe,mBAUI,IAAI;AAAAkJ,eAAA,CAVvBlJ,eAAe,kBAY4BJ,qBAAqB;AAsoBtE,eAAeI,eAAe","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
|
-
*
|
|
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,
|
|
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
|
-
*
|
|
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
|
|
38
|
-
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(
|
|
233
|
-
var id =
|
|
296
|
+
var languageIds = languages.map(_ref4 => {
|
|
297
|
+
var id = _ref4.id;
|
|
234
298
|
return id;
|
|
235
299
|
});
|
|
236
|
-
monaco.languages.getLanguages().filter(
|
|
237
|
-
var 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] :
|
|
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) |
|
|
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) |
|
|
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
|
|
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
|