@deephaven/console 0.97.1-beta.3 → 0.97.1-dhe-ruff.8

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.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoProviders.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAa,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAM5E,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,aAAa,CACzC,mBAAmB,EACnB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IAEjC,MAAM,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,CAAC,aAAa,UAAQ;IAE5B,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAyB;IAErE;;;OAGG;WACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtC;;;OAGG;WACU,eAAe,CAC1B,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAgC,GAC/D,OAAO,CAAC,IAAI,CAAC;IAYhB,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,UAAU,EAAE;IAepE,MAAM,CAAC,aAAa,IAAI,IAAI;IAY5B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI;IAkCxD;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;IA0DxD;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM;IAY3D;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CACxB,QAAQ,EAAE,MAAM,CAAC,SAAS,GACzB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;IAQ9C,MAAM,CAAC,6BAA6B,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,GAClB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;IAmInE,MAAM,CAAC,yBAAyB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,iBAAiB,EAC3C,KAAK,EAAE,MAAM,CAAC,iBAAiB,GAC9B,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBAenD,KAAK,EAAE,mBAAmB;IAQtC,iBAAiB,IAAI,IAAI;IA4CzB,oBAAoB,IAAI,IAAI;IAM5B,4BAA4B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAElD,2BAA2B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAEjD,uBAAuB,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAE7C,uBAAuB,CACrB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAC1C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;IAkEnE,sBAAsB,CACpB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAC/B,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,oBAAoB,GAC7C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC;IAwExE,kBAAkB,CAChB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,GACxB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;IAkC1D,MAAM,IAAI,IAAI;CAGf;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"MonacoProviders.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoProviders.tsx"],"names":[],"mappings":"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"}
@@ -8,7 +8,6 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
8
8
  */
9
9
  import { PureComponent } from 'react';
10
10
  import * as monaco from 'monaco-editor';
11
- import throttle from 'lodash.throttle';
12
11
  import Log from '@deephaven/log';
13
12
  import init, { Workspace } from '@astral-sh/ruff-wasm-web';
14
13
  import RUFF_DEFAULT_SETTINGS from "./RuffDefaultSettings.js";
@@ -47,7 +46,8 @@ class MonacoProviders extends PureComponent {
47
46
  MonacoProviders.ruffSettings = settings;
48
47
 
49
48
  // Ruff has not been initialized yet
50
- if (MonacoProviders.ruffWorkspace == null) {
49
+ if (MonacoProviders.ruffWorkspace == null && MonacoProviders.isRuffEnabled) {
50
+ MonacoProviders.initRuff();
51
51
  return;
52
52
  }
53
53
  MonacoProviders.ruffWorkspace = new Workspace(settings);
@@ -200,7 +200,7 @@ class MonacoProviders extends PureComponent {
200
200
  };
201
201
  }
202
202
  static handlePythonCodeActionRequest(model, range) {
203
- if (!MonacoProviders.ruffWorkspace) {
203
+ if (!MonacoProviders.isRuffEnabled || !MonacoProviders.ruffWorkspace) {
204
204
  return {
205
205
  actions: [],
206
206
  dispose: () => {
@@ -335,8 +335,7 @@ class MonacoProviders extends PureComponent {
335
335
  componentDidMount() {
336
336
  var {
337
337
  language,
338
- session,
339
- model
338
+ session
340
339
  } = this.props;
341
340
  this.registeredCompletionProvider = monaco.languages.registerCompletionItemProvider(language, {
342
341
  provideCompletionItems: this.handleCompletionRequest,
@@ -353,17 +352,6 @@ class MonacoProviders extends PureComponent {
353
352
  provideHover: this.handleHoverRequest
354
353
  });
355
354
  }
356
- if (language === 'python') {
357
- if (MonacoProviders.ruffWorkspace == null) {
358
- MonacoProviders.initRuff(); // This will also lint all open editors
359
- } else {
360
- MonacoProviders.lintPython(model);
361
- }
362
- var throttledLint = throttle(m => MonacoProviders.lintPython(m), 250);
363
- model.onDidChangeContent(() => {
364
- throttledLint(model);
365
- });
366
- }
367
355
  }
368
356
  componentWillUnmount() {
369
357
  var _this$registeredCompl, _this$registeredSigna, _this$registeredHover;
@@ -1 +1 @@
1
- {"version":3,"file":"MonacoProviders.js","names":["PureComponent","monaco","throttle","Log","init","Workspace","RUFF_DEFAULT_SETTINGS","MonacoUtils","log","module","MonacoProviders","initRuff","_asyncToGenerator","initRuffPromise","then","debug","version","ruffWorkspace","ruffSettings","lintAllPython","setRuffSettings","_arguments","arguments","settings","length","undefined","getDiagnostics","model","diagnostics","check","getValue","isConsoleModel","filter","d","code","isRuffEnabled","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","disableActions","getLineContent","lastToken","tokenize","at","lineEdit","type","startsWith","offset","flat","handlePythonFormatRequest","options","token","getFullModelRange","format","constructor","props","_defineProperty","handleCompletionRequest","bind","handleSignatureRequest","handleHoverRequest","componentDidMount","language","session","registeredCompletionProvider","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","getSignatureHelp","registeredSignatureProvider","registerSignatureHelpProvider","provideSignatureHelp","signatureHelpTriggerCharacters","getHover","registeredHoverProvider","registerHoverProvider","provideHover","throttledLint","onDidChangeContent","componentWillUnmount","_this$registeredCompl","_this$registeredSigna","_this$registeredHover","context","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","signatureItems","monacoSignatures","parameters","hover","monacoHover","hoverItem","contents","hoverContents","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 throttle from 'lodash.throttle';\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 isRuffEnabled = true;\n\n static ruffSettings: Record<string, unknown> = RUFF_DEFAULT_SETTINGS;\n\n /**\n * Loads and initializes Ruff.\n * Subsequent calls will return the same promise.\n */\n static async initRuff(): Promise<void> {\n if (MonacoProviders.initRuffPromise) {\n return MonacoProviders.initRuffPromise;\n }\n\n MonacoProviders.initRuffPromise = init({}).then(() => {\n log.debug('Initialized Ruff', Workspace.version());\n\n MonacoProviders.ruffWorkspace = new Workspace(\n MonacoProviders.ruffSettings\n );\n MonacoProviders.lintAllPython();\n });\n\n return MonacoProviders.initRuffPromise;\n }\n\n /**\n * Sets ruff settings\n * @param settings The ruff settings\n */\n static async setRuffSettings(\n settings: Record<string, unknown> = MonacoProviders.ruffSettings\n ): Promise<void> {\n MonacoProviders.ruffSettings = settings;\n\n // Ruff has not been initialized yet\n if (MonacoProviders.ruffWorkspace == null) {\n return;\n }\n\n MonacoProviders.ruffWorkspace = new Workspace(settings);\n MonacoProviders.lintAllPython();\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.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 diagnosticRange.intersectRanges(range);\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 disableActions: monaco.languages.CodeAction[] = diagnostics\n .map(d => {\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 this line`,\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 title: `Disable ${d.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: ${d.code}\\n`,\n },\n },\n ],\n },\n },\n ];\n })\n .flat();\n\n return {\n actions: [...fixActions, ...disableActions],\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, model } = 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 if (language === 'python') {\n if (MonacoProviders.ruffWorkspace == null) {\n MonacoProviders.initRuff(); // This will also lint all open editors\n } else {\n MonacoProviders.lintPython(model);\n }\n\n const throttledLint = throttle(\n (m: monaco.editor.ITextModel) => MonacoProviders.lintPython(m),\n 250\n );\n\n model.onDidChangeContent(() => {\n throttledLint(model);\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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"}
1
+ {"version":3,"file":"MonacoProviders.js","names":["PureComponent","monaco","Log","init","Workspace","RUFF_DEFAULT_SETTINGS","MonacoUtils","log","module","MonacoProviders","initRuff","_asyncToGenerator","initRuffPromise","then","debug","version","ruffWorkspace","ruffSettings","lintAllPython","setRuffSettings","_arguments","arguments","settings","length","undefined","isRuffEnabled","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","disableActions","getLineContent","lastToken","tokenize","at","lineEdit","type","startsWith","offset","flat","handlePythonFormatRequest","options","token","getFullModelRange","format","constructor","props","_defineProperty","handleCompletionRequest","bind","handleSignatureRequest","handleHoverRequest","componentDidMount","language","session","registeredCompletionProvider","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","getSignatureHelp","registeredSignatureProvider","registerSignatureHelpProvider","provideSignatureHelp","signatureHelpTriggerCharacters","getHover","registeredHoverProvider","registerHoverProvider","provideHover","componentWillUnmount","_this$registeredCompl","_this$registeredSigna","_this$registeredHover","context","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","signatureItems","monacoSignatures","parameters","hover","monacoHover","hoverItem","contents","hoverContents","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 isRuffEnabled = true;\n\n static ruffSettings: Record<string, unknown> = RUFF_DEFAULT_SETTINGS;\n\n /**\n * Loads and initializes Ruff.\n * Subsequent calls will return the same promise.\n */\n static async initRuff(): Promise<void> {\n if (MonacoProviders.initRuffPromise) {\n return MonacoProviders.initRuffPromise;\n }\n\n MonacoProviders.initRuffPromise = init({}).then(() => {\n log.debug('Initialized Ruff', Workspace.version());\n\n MonacoProviders.ruffWorkspace = new Workspace(\n MonacoProviders.ruffSettings\n );\n MonacoProviders.lintAllPython();\n });\n\n return MonacoProviders.initRuffPromise;\n }\n\n /**\n * Sets ruff settings\n * @param settings The ruff settings\n */\n static async setRuffSettings(\n settings: Record<string, unknown> = MonacoProviders.ruffSettings\n ): Promise<void> {\n MonacoProviders.ruffSettings = settings;\n\n // Ruff has not been initialized yet\n if (\n MonacoProviders.ruffWorkspace == null &&\n MonacoProviders.isRuffEnabled\n ) {\n MonacoProviders.initRuff();\n return;\n }\n\n MonacoProviders.ruffWorkspace = new Workspace(settings);\n MonacoProviders.lintAllPython();\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 diagnosticRange.intersectRanges(range);\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 disableActions: monaco.languages.CodeAction[] = diagnostics\n .map(d => {\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 this line`,\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 title: `Disable ${d.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: ${d.code}\\n`,\n },\n },\n ],\n },\n },\n ];\n })\n .flat();\n\n return {\n actions: [...fixActions, ...disableActions],\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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"}
@@ -90,6 +90,17 @@ declare class MonacoUtils {
90
90
  * @returns If the model is a console model
91
91
  */
92
92
  static isConsoleModel(model: monaco.editor.ITextModel): boolean;
93
+ /**
94
+ * Checks if the editor has the formatDocument action registered.
95
+ * @param editor The monaco editor to check
96
+ * @returns If the editor has a document formatter registered
97
+ */
98
+ static canFormat(editor: monaco.editor.IStandaloneCodeEditor): boolean;
99
+ /**
100
+ * Runs the formatDocument action on the editor.
101
+ * @param editor The editor to format
102
+ */
103
+ static formatDocument(editor: monaco.editor.IStandaloneCodeEditor): Promise<void>;
93
104
  }
94
105
  export default MonacoUtils;
95
106
  //# sourceMappingURL=MonacoUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MonacoUtils.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoUtils.ts"],"names":[],"mappings":"AAEA;;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;IAiCvD;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,IAAI;IAkKxB;;;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;CAGhE;AAED,eAAe,WAAW,CAAC"}
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;IAkKxB;;;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,3 +1,5 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
1
3
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
4
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
5
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -5,6 +7,7 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
5
7
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
8
  /* eslint-disable @typescript-eslint/ban-ts-comment */
7
9
  import { nanoid } from 'nanoid';
10
+ import throttle from 'lodash.throttle';
8
11
  /**
9
12
  * Exports a function for initializing monaco with the deephaven theme/config
10
13
  */
@@ -54,6 +57,18 @@ class MonacoUtils {
54
57
  provideDocumentFormattingEdits: MonacoProviders.handlePythonFormatRequest
55
58
  });
56
59
  });
60
+ monaco.editor.onDidCreateModel(model => {
61
+ // Lint Python models on creation and on change
62
+ if (model.getLanguageId() === 'python') {
63
+ if (MonacoProviders.ruffWorkspace != null) {
64
+ MonacoProviders.lintPython(model);
65
+ }
66
+ var throttledLint = throttle(m => MonacoProviders.lintPython(m), 250);
67
+ model.onDidChangeContent(() => {
68
+ throttledLint(model);
69
+ });
70
+ }
71
+ });
57
72
  MonacoUtils.removeConflictingKeybindings();
58
73
  log.debug('Monaco initialized.');
59
74
  }
@@ -473,6 +488,27 @@ class MonacoUtils {
473
488
  static isConsoleModel(model) {
474
489
  return model.uri.toString().startsWith(CONSOLE_URI_PREFIX);
475
490
  }
491
+
492
+ /**
493
+ * Checks if the editor has the formatDocument action registered.
494
+ * @param editor The monaco editor to check
495
+ * @returns If the editor has a document formatter registered
496
+ */
497
+ static canFormat(editor) {
498
+ var _editor$getAction;
499
+ return ((_editor$getAction = editor.getAction('editor.action.formatDocument')) === null || _editor$getAction === void 0 ? void 0 : _editor$getAction.isSupported()) === true;
500
+ }
501
+
502
+ /**
503
+ * Runs the formatDocument action on the editor.
504
+ * @param editor The editor to format
505
+ */
506
+ static formatDocument(editor) {
507
+ return _asyncToGenerator(function* () {
508
+ var _editor$getAction2;
509
+ yield (_editor$getAction2 = editor.getAction('editor.action.formatDocument')) === null || _editor$getAction2 === void 0 ? void 0 : _editor$getAction2.run();
510
+ })();
511
+ }
476
512
  }
477
513
  export default MonacoUtils;
478
514
  //# sourceMappingURL=MonacoUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MonacoUtils.js","names":["nanoid","resolveCssVariablesInRecord","assertNotNull","find","linkifyFind","monaco","KeyCodeUtils","Log","MonacoThemeRaw","PyLang","GroovyLang","ScalaLang","DbLang","LogLang","MonacoProviders","log","module","CONSOLE_URI_PREFIX","MonacoUtils","init","getWorker","arguments","length","undefined","debug","registerGetWorker","initTheme","registerLanguages","languages","onLanguage","registerCodeActionProvider","provideCodeActions","handlePythonCodeActionRequest","providedCodeActionKinds","registerDocumentFormattingEditProvider","provideDocumentFormattingEdits","handlePythonFormatRequest","removeConflictingKeybindings","_MonacoTheme$logErro","_MonacoTheme$logErro2","removeHashtag","MonacoTheme","debug2","dhDarkRules","token","foreground","string","keyword","delimiter","comment","number","storage","identifier","operator","predefined","substring","dhDarkColors","errorForeground","background","focusBorder","editor","defineTheme","base","inherit","rules","colors","setTheme","err","error","window","MonacoEnvironment","_objectSpread","color","_color$substring","languageIds","map","_ref","id","getLanguages","filter","_ref2","includes","forEach","languageParam","language","registerLanguage","register","setLanguageConfiguration","conf","setMonarchTokensProvider","setEOL","_editor$getModel","eolSequence","EndOfLineSequence","LF","getModel","openDocument","session","model","didOpenDocumentParams","textDocument","uri","concat","languageId","getLanguageId","version","getVersionId","text","getValue","dispose","onDidChangeModelContent","changedEvent","changes","versionId","contentChanges","i","change","range","rangeLength","contentChange","start","line","startLineNumber","character","startColumn","end","endLineNumber","endColumn","push","didChangeDocumentParams","changeDocument","closeDocument","didCloseDocumentParams","registerPasteHandler","onDidPaste","pasteEvent","smartQuotes","invalidChars","invalidSpaces","editorModel","pastedText","getValueInRange","test","applyEdits","replace","isMacPlatform","platform","navigator","startsWith","addKeybindingRule","keybinding","KeyMod","CtrlCmd","KeyCode","KeyD","command","KeyH","disableKeyBindings","keybindings","addAction","label","run","getMonacoKeyCodeFromShortcut","shortcut","keyState","keyValue","isMac","metaKey","shiftKey","Shift","altKey","Alt","ctrlKey","WinCtrl","fromString","provideLinks","newTokens","_loop","lineText","getLineContent","originalTokens","tokens","type","value","url","href","Range","getLineCount","links","generateConsoleUri","Uri","parse","isConsoleModel","toString"],"sources":["../../src/monaco/MonacoUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { nanoid } from 'nanoid';\n/**\n * Exports a function for initializing monaco with the deephaven theme/config\n */\nimport {\n resolveCssVariablesInRecord,\n type Shortcut,\n} from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { find as linkifyFind } from 'linkifyjs';\nimport * as monaco from 'monaco-editor';\nimport type { Environment } from 'monaco-editor';\n// @ts-ignore\nimport { KeyCodeUtils } from 'monaco-editor/esm/vs/base/common/keyCodes.js';\nimport Log from '@deephaven/log';\nimport MonacoThemeRaw from './MonacoTheme.module.scss';\nimport PyLang from './lang/python';\nimport GroovyLang from './lang/groovy';\nimport ScalaLang from './lang/scala';\nimport DbLang from './lang/db';\nimport LogLang from './lang/log';\nimport { type Language } from './lang/Language';\nimport MonacoProviders from './MonacoProviders';\n\nconst log = Log.module('MonacoUtils');\n\nconst CONSOLE_URI_PREFIX = 'inmemory://dh-console/';\n\ndeclare global {\n interface Window {\n MonacoEnvironment?: Environment;\n }\n}\n\nclass MonacoUtils {\n /**\n * Initializes Monaco for the environment\n * @param getWorker The getWorker function Monaco should use\n * The workers should be provided by the caller and bundled by their build system (e.g. Vite, Webpack)\n */\n static init({\n getWorker,\n }: { getWorker?: Environment['getWorker'] } = {}): void {\n log.debug('Initializing Monaco...');\n\n if (getWorker !== undefined) {\n MonacoUtils.registerGetWorker(getWorker);\n }\n\n const { initTheme, registerLanguages } = MonacoUtils;\n\n initTheme();\n\n registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);\n\n monaco.languages.onLanguage('python', () => {\n monaco.languages.registerCodeActionProvider(\n 'python',\n {\n provideCodeActions: MonacoProviders.handlePythonCodeActionRequest,\n },\n { providedCodeActionKinds: ['quickfix'] }\n );\n\n monaco.languages.registerDocumentFormattingEditProvider('python', {\n provideDocumentFormattingEdits:\n MonacoProviders.handlePythonFormatRequest,\n });\n });\n\n MonacoUtils.removeConflictingKeybindings();\n\n log.debug('Monaco initialized.');\n }\n\n /**\n * Initialize current Monaco theme based on the current DH theme.\n */\n static initTheme(): void {\n const { removeHashtag } = MonacoUtils;\n\n const MonacoTheme = resolveCssVariablesInRecord(MonacoThemeRaw);\n log.debug2('Monaco theme:', MonacoThemeRaw);\n log.debug2('Monaco theme derived:', MonacoTheme);\n\n const dhDarkRules = [\n { token: '', foreground: removeHashtag(MonacoTheme.foreground) },\n { token: 'string', foreground: removeHashtag(MonacoTheme.string) },\n {\n token: 'string.delim',\n foreground: removeHashtag(MonacoTheme['string-delim']),\n },\n { token: 'keyword', foreground: removeHashtag(MonacoTheme.keyword) },\n {\n token: 'identifier.js',\n foreground: removeHashtag(MonacoTheme['identifier-js']),\n },\n {\n token: 'delimiter',\n foreground: removeHashtag(MonacoTheme.delimiter),\n },\n { token: 'comment', foreground: removeHashtag(MonacoTheme.comment) },\n { token: 'number', foreground: removeHashtag(MonacoTheme.number) },\n { token: 'storage', foreground: removeHashtag(MonacoTheme.storage) },\n {\n token: 'identifier',\n foreground: removeHashtag(MonacoTheme.identifier),\n },\n {\n token: 'namespace.identifier',\n foreground: removeHashtag(MonacoTheme['namespace-identifier']),\n },\n { token: 'operator', foreground: removeHashtag(MonacoTheme.operator) },\n {\n token: 'predefined',\n foreground: removeHashtag(MonacoTheme.predefined),\n },\n {\n token: 'error.log',\n foreground: MonacoTheme['log-error']?.substring(1) ?? '',\n },\n {\n token: 'warn.log',\n foreground: removeHashtag(MonacoTheme['log-warn']),\n },\n {\n token: 'info.log',\n foreground: removeHashtag(MonacoTheme['log-info']),\n },\n {\n token: 'stdout.log',\n foreground: removeHashtag(MonacoTheme['log-stdout']),\n },\n {\n token: 'trace.log',\n foreground: removeHashtag(MonacoTheme['log-trace']),\n },\n {\n token: 'debug.log',\n foreground: removeHashtag(MonacoTheme['log-debug']),\n },\n {\n token: 'date.log',\n foreground: removeHashtag(MonacoTheme['log-date']),\n },\n ];\n\n const dhDarkColors = {\n foreground: MonacoTheme.foreground,\n errorForeground: MonacoTheme['error-foreground'],\n 'inputOption.activeBorder': MonacoTheme['input-option-active-border'],\n 'editor.background': MonacoTheme.background,\n 'editor.foreground': MonacoTheme.foreground,\n 'editor.lineHighlightBackground':\n MonacoTheme['editor-line-highlight-background'],\n 'editorLineNumber.foreground':\n MonacoTheme['editor-line-number-foreground'],\n 'editorLineNumber.activeForeground':\n MonacoTheme['editor-line-number-active-foreground'],\n 'editor.selectionBackground': MonacoTheme['editor-selection-background'],\n 'editor.inactiveSelectionBackground':\n MonacoTheme['editor-inactive-selection-background'],\n 'editor.selectionHighlightBackground':\n MonacoTheme['editor-selection-highlight-background'],\n 'editor.wordHighlightBackground':\n MonacoTheme['editor-word-highlight-background'],\n 'editor.findMatchBackground': MonacoTheme['editor-find-match-background'],\n 'editor.findMatchHighlightBackground':\n MonacoTheme['editor-find-match-highlight-background'],\n 'editorSuggestWidget.background':\n MonacoTheme['editor-suggest-widget-background'],\n 'editorSuggestWidget.border': MonacoTheme['editor-suggest-widget-border'],\n 'editorSuggestWidget.foreground':\n MonacoTheme['editor-suggest-widget-foreground'],\n 'editorSuggestWidget.selectedBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'list.activeSelectionBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'editorSuggestWidget.selectedForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'list.activeSelectionForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'editorSuggestWidget.highlightForeground':\n MonacoTheme['editor-suggest-widget-highlightForeground'],\n 'editorSuggestWidget.focusHighlightForeground':\n MonacoTheme['editor-suggest-widget-focus-highlight-foreground'],\n 'list.hoverBackground': MonacoTheme['list-hover-background'],\n 'dropdown.background': MonacoTheme['context-menu-background'],\n 'dropdown.foreground': MonacoTheme['context-menu-foreground'],\n 'menu.selectionBackground': MonacoTheme['menu-selection-background'],\n 'menu.selectionForeground': MonacoTheme['menu-selection-foreground'],\n 'keybindingLabel.foreground': MonacoTheme['menu-selection-foreground'],\n 'list.focusBackground': MonacoTheme['menu-selection-background'],\n 'editorWidget.background': MonacoTheme['editor-widget-background'],\n 'inputOption.activeBackground':\n MonacoTheme['input-option-active-background'],\n 'inputOption.activeForeground':\n MonacoTheme['input-option-active-foreground'],\n focusBorder: MonacoTheme['focus-border'],\n 'input.background': MonacoTheme['input-background'],\n 'input.foreground': MonacoTheme['input-foreground'],\n 'input.border': MonacoTheme['input-border'],\n 'textLink.foreground': MonacoTheme['text-link-foreground'],\n 'textLink.activeForeground': MonacoTheme['text-link-active-foreground'],\n 'editorLink.activeForeground':\n MonacoTheme['editor-link-active-foreground'],\n 'editorBracketHighlight.foreground1':\n MonacoTheme['editor-bracket-foreground1'],\n 'editorBracketHighlight.foreground2':\n MonacoTheme['editor-bracket-foreground2'],\n 'editorBracketHighlight.foreground3':\n MonacoTheme['editor-bracket-foreground3'],\n 'editorBracketHighlight.foreground4':\n MonacoTheme['editor-bracket-foreground4'],\n 'editorBracketHighlight.foreground5':\n MonacoTheme['editor-bracket-foreground5'],\n 'editorBracketHighlight.foreground6':\n MonacoTheme['editor-bracket-foreground6'],\n 'editorBracketHighlight.unexpectedBracket.foreground':\n MonacoTheme['editor-unexpected-bracket-foreground'],\n };\n\n monaco.editor.defineTheme('dh-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: dhDarkRules,\n colors: dhDarkColors,\n });\n\n try {\n monaco.editor.setTheme('dh-dark');\n } catch (err) {\n log.error(\n `Failed to set 'dh-dark' Monaco theme, falling back to vs-dark`,\n err\n );\n monaco.editor.setTheme('vs-dark');\n }\n }\n\n /**\n * Register the getWorker function for Monaco\n * @param getWorker The getWorker function for Monaco\n */\n static registerGetWorker(getWorker: Environment['getWorker']): void {\n window.MonacoEnvironment = {\n ...window.MonacoEnvironment,\n getWorker,\n };\n }\n\n /**\n * Remove the hashtag prefix from a CSS color string.\n * Monaco expects colors to be the value only, no hashtag.\n * @param color The hex color string to remove the hashtag from, eg. '#ffffff'\n */\n static removeHashtag(color?: string): string {\n return color?.substring(1) ?? '';\n }\n\n static registerLanguages(languages: Language[]): void {\n // First override the default loader for any language we have a custom definition for\n // https://github.com/Microsoft/monaco-editor/issues/252#issuecomment-482786867\n const languageIds = languages.map(({ id }) => id);\n monaco.languages\n .getLanguages()\n .filter(({ id }) => languageIds.includes(id))\n .forEach(languageParam => {\n const language = languageParam;\n log.debug2('Overriding default language loader:', language.id);\n });\n\n // Then register our language definitions\n languages.forEach(language => {\n MonacoUtils.registerLanguage(language);\n });\n }\n\n static registerLanguage(language: Language): void {\n log.debug2('Registering language: ', language.id);\n monaco.languages.register(language);\n\n monaco.languages.onLanguage(language.id, () => {\n monaco.languages.setLanguageConfiguration(language.id, language.conf);\n monaco.languages.setMonarchTokensProvider(language.id, language.language);\n });\n }\n\n /**\n * Set EOL preference for the editor\n * @param editor The editor to set the EOL for\n * @param eolSequence EOL sequence\n */\n static setEOL(\n editor: monaco.editor.IStandaloneCodeEditor,\n eolSequence = monaco.editor.EndOfLineSequence.LF\n ): void {\n editor.getModel()?.setEOL(eolSequence);\n }\n\n /**\n * Links an editor with a provided session to provide completion items.\n * @param session The IdeSession to link\n * @param editor The editor to link the session to\n * @returns A cleanup function for disposing of the created listeners\n */\n static openDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: dh.IdeSession\n ): monaco.IDisposable {\n const model = editor.getModel();\n assertNotNull(model);\n const didOpenDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n languageId: model.getLanguageId(),\n version: model.getVersionId(),\n text: model.getValue(),\n },\n };\n log.debug2('didOpenDocumentParams: ', didOpenDocumentParams);\n\n session.openDocument(didOpenDocumentParams);\n\n const dispose = editor.onDidChangeModelContent(changedEvent => {\n const { changes, versionId } = changedEvent;\n\n const contentChanges = [];\n for (let i = 0; i < changes.length; i += 1) {\n const change = changes[i];\n const { range, rangeLength, text } = change;\n const contentChange = {\n range: {\n start: {\n line: range.startLineNumber - 1,\n character: range.startColumn - 1,\n },\n end: {\n line: range.endLineNumber - 1,\n character: range.endColumn - 1,\n },\n },\n rangeLength,\n text,\n };\n\n contentChanges.push(contentChange);\n }\n\n if (contentChanges.length > 0) {\n const didChangeDocumentParams = {\n textDocument: {\n version: versionId,\n uri: `${model.uri}`,\n },\n contentChanges,\n };\n log.debug2('didChangeDocumentParams', didChangeDocumentParams);\n session.changeDocument(didChangeDocumentParams);\n }\n });\n\n return dispose;\n }\n\n static closeDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: dh.IdeSession\n ): void {\n const model = editor.getModel();\n assertNotNull(model);\n const didCloseDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n },\n };\n session.closeDocument(didCloseDocumentParams);\n }\n\n /**\n * Register a paste handle to clean up any garbage code pasted.\n * Most of this comes from copying from Slack, which has a bad habit of injecting their own characters in your code snippets.\n * I've emailed Slack about the issue and they're working on it. I can't reference a ticket number because their ticket system is entirely internally facing.\n * @param editor The editor the register the paste handler for\n */\n static registerPasteHandler(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n editor.onDidPaste(pasteEvent => {\n const smartQuotes = /“|”/g;\n const invalidChars = /\\u200b/g; // zero width space\n const invalidSpaces = /\\u00A0/g; // non-breaking space\n const editorModel = editor.getModel();\n assertNotNull(editorModel);\n const pastedText = editorModel.getValueInRange(pasteEvent.range);\n if (\n smartQuotes.test(pastedText) ||\n invalidChars.test(pastedText) ||\n invalidSpaces.test(pastedText)\n ) {\n editorModel.applyEdits([\n {\n range: pasteEvent.range,\n text: pastedText\n .replace(smartQuotes, '\"')\n .replace(invalidChars, '')\n .replace(invalidSpaces, ' '),\n },\n ]);\n }\n });\n }\n\n static isMacPlatform(): boolean {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Remove any keybindings which are used for our own shortcuts.\n * This allows the key events to bubble up so a component higher up can capture\n * them. Note that this is a global configuration, so all editor instances will\n * be impacted.\n */\n static removeConflictingKeybindings(): void {\n // All editor instances share a global keybinding registry which is where\n // default keybindings are set. There doesn't appear to be a way to remove\n // default bindings, but we can add new ones that will override the existing\n // ones and set `command` to null. This will treat the key events as unhandled\n // and allow them to bubble up.\n monaco.editor.addKeybindingRule(\n // Restart console in Enterprise (see Shortcuts.ts)\n {\n /* eslint-disable-next-line no-bitwise */\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyD,\n command: null,\n }\n );\n\n // Ctrl+H is used to focus Community console history in Windows + Linux.\n // An alternate shortcut is used for Mac, so no need to override it\n // (See ConsoleShortcuts.ts)\n if (!MonacoUtils.isMacPlatform()) {\n monaco.editor.addKeybindingRule({\n /* eslint-disable-next-line no-bitwise */\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyH,\n command: null,\n });\n }\n }\n\n /**\n * Creates actions with a `noop` run function to disable specified keybindings.\n * Note that this will swallow the events. To disable default keybindings in a\n * way that allows events to propagate upward, see `removeConflictingKeybindings`\n * @param editor Editor to disable keybindings for\n * @param keybindings List of monaco keybindings to disable. Often a bitwise\n * combination like `monaco.KeyMod.Alt | monaco.KeyMod.KeyJ`\n */\n static disableKeyBindings(\n editor: monaco.editor.IStandaloneCodeEditor,\n keybindings: number[]\n ): void {\n editor.addAction({\n // This shouldn't be referenced by anything so using an arbitrary unique id\n id: `disable-keybindings-${nanoid()}`,\n label: '', // This action won't be shown in the UI so no need for a label\n keybindings,\n run: () => undefined,\n });\n }\n\n static getMonacoKeyCodeFromShortcut(shortcut: Shortcut): number {\n const { keyState } = shortcut;\n const { keyValue } = keyState;\n if (keyValue === null) {\n return 0;\n }\n\n const isMac = MonacoUtils.isMacPlatform();\n\n if (isMac) {\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.metaKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.ctrlKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.ctrlKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.metaKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n static provideLinks(model: monaco.editor.ITextModel): {\n links: monaco.languages.ILink[];\n } {\n const newTokens: monaco.languages.ILink[] = [];\n\n for (let i = 1; i <= model.getLineCount(); i += 1) {\n const lineText = model.getLineContent(i);\n const originalTokens = linkifyFind(lineText);\n\n const tokens = originalTokens.filter(token => {\n if (token.type === 'url') {\n return /^https?:\\/\\//.test(token.value);\n }\n return true;\n });\n // map the tokens to the ranges - you know the line number now, use the token start/end as the startColumn/endColumn\n tokens.forEach(token => {\n newTokens.push({\n url: token.href,\n range: new monaco.Range(i, token.start + 1, i, token.end + 1),\n });\n });\n }\n\n return {\n links: newTokens,\n };\n }\n\n /**\n * Generates a console URI for use with monaco.\n * @returns A new console URI\n */\n static generateConsoleUri(): monaco.Uri {\n return monaco.Uri.parse(`${CONSOLE_URI_PREFIX}${nanoid()}`);\n }\n\n /**\n * Checks if a model is a console model based on its URI.\n * @param model The monaco model to check\n * @returns If the model is a console model\n */\n static isConsoleModel(model: monaco.editor.ITextModel): boolean {\n return model.uri.toString().startsWith(CONSOLE_URI_PREFIX);\n }\n}\n\nexport default MonacoUtils;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MonacoUtils.js","names":["nanoid","throttle","resolveCssVariablesInRecord","assertNotNull","find","linkifyFind","monaco","KeyCodeUtils","Log","MonacoThemeRaw","PyLang","GroovyLang","ScalaLang","DbLang","LogLang","MonacoProviders","log","module","CONSOLE_URI_PREFIX","MonacoUtils","init","getWorker","arguments","length","undefined","debug","registerGetWorker","initTheme","registerLanguages","languages","onLanguage","registerCodeActionProvider","provideCodeActions","handlePythonCodeActionRequest","providedCodeActionKinds","registerDocumentFormattingEditProvider","provideDocumentFormattingEdits","handlePythonFormatRequest","editor","onDidCreateModel","model","getLanguageId","ruffWorkspace","lintPython","throttledLint","m","onDidChangeContent","removeConflictingKeybindings","_MonacoTheme$logErro","_MonacoTheme$logErro2","removeHashtag","MonacoTheme","debug2","dhDarkRules","token","foreground","string","keyword","delimiter","comment","number","storage","identifier","operator","predefined","substring","dhDarkColors","errorForeground","background","focusBorder","defineTheme","base","inherit","rules","colors","setTheme","err","error","window","MonacoEnvironment","_objectSpread","color","_color$substring","languageIds","map","_ref","id","getLanguages","filter","_ref2","includes","forEach","languageParam","language","registerLanguage","register","setLanguageConfiguration","conf","setMonarchTokensProvider","setEOL","_editor$getModel","eolSequence","EndOfLineSequence","LF","getModel","openDocument","session","didOpenDocumentParams","textDocument","uri","concat","languageId","version","getVersionId","text","getValue","dispose","onDidChangeModelContent","changedEvent","changes","versionId","contentChanges","i","change","range","rangeLength","contentChange","start","line","startLineNumber","character","startColumn","end","endLineNumber","endColumn","push","didChangeDocumentParams","changeDocument","closeDocument","didCloseDocumentParams","registerPasteHandler","onDidPaste","pasteEvent","smartQuotes","invalidChars","invalidSpaces","editorModel","pastedText","getValueInRange","test","applyEdits","replace","isMacPlatform","platform","navigator","startsWith","addKeybindingRule","keybinding","KeyMod","CtrlCmd","KeyCode","KeyD","command","KeyH","disableKeyBindings","keybindings","addAction","label","run","getMonacoKeyCodeFromShortcut","shortcut","keyState","keyValue","isMac","metaKey","shiftKey","Shift","altKey","Alt","ctrlKey","WinCtrl","fromString","provideLinks","newTokens","_loop","lineText","getLineContent","originalTokens","tokens","type","value","url","href","Range","getLineCount","links","generateConsoleUri","Uri","parse","isConsoleModel","toString","canFormat","_editor$getAction","getAction","isSupported","formatDocument","_asyncToGenerator","_editor$getAction2"],"sources":["../../src/monaco/MonacoUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { nanoid } from 'nanoid';\nimport throttle from 'lodash.throttle';\n/**\n * Exports a function for initializing monaco with the deephaven theme/config\n */\nimport {\n resolveCssVariablesInRecord,\n type Shortcut,\n} from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { find as linkifyFind } from 'linkifyjs';\nimport * as monaco from 'monaco-editor';\nimport type { Environment } from 'monaco-editor';\n// @ts-ignore\nimport { KeyCodeUtils } from 'monaco-editor/esm/vs/base/common/keyCodes.js';\nimport Log from '@deephaven/log';\nimport MonacoThemeRaw from './MonacoTheme.module.scss';\nimport PyLang from './lang/python';\nimport GroovyLang from './lang/groovy';\nimport ScalaLang from './lang/scala';\nimport DbLang from './lang/db';\nimport LogLang from './lang/log';\nimport { type Language } from './lang/Language';\nimport MonacoProviders from './MonacoProviders';\n\nconst log = Log.module('MonacoUtils');\n\nconst CONSOLE_URI_PREFIX = 'inmemory://dh-console/';\n\ndeclare global {\n interface Window {\n MonacoEnvironment?: Environment;\n }\n}\n\nclass MonacoUtils {\n /**\n * Initializes Monaco for the environment\n * @param getWorker The getWorker function Monaco should use\n * The workers should be provided by the caller and bundled by their build system (e.g. Vite, Webpack)\n */\n static init({\n getWorker,\n }: { getWorker?: Environment['getWorker'] } = {}): void {\n log.debug('Initializing Monaco...');\n\n if (getWorker !== undefined) {\n MonacoUtils.registerGetWorker(getWorker);\n }\n\n const { initTheme, registerLanguages } = MonacoUtils;\n\n initTheme();\n\n registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);\n\n monaco.languages.onLanguage('python', () => {\n monaco.languages.registerCodeActionProvider(\n 'python',\n {\n provideCodeActions: MonacoProviders.handlePythonCodeActionRequest,\n },\n { providedCodeActionKinds: ['quickfix'] }\n );\n\n monaco.languages.registerDocumentFormattingEditProvider('python', {\n provideDocumentFormattingEdits:\n MonacoProviders.handlePythonFormatRequest,\n });\n });\n\n monaco.editor.onDidCreateModel(model => {\n // Lint Python models on creation and on change\n if (model.getLanguageId() === 'python') {\n if (MonacoProviders.ruffWorkspace != null) {\n MonacoProviders.lintPython(model);\n }\n\n const throttledLint = throttle(\n (m: monaco.editor.ITextModel) => MonacoProviders.lintPython(m),\n 250\n );\n\n model.onDidChangeContent(() => {\n throttledLint(model);\n });\n }\n });\n\n MonacoUtils.removeConflictingKeybindings();\n\n log.debug('Monaco initialized.');\n }\n\n /**\n * Initialize current Monaco theme based on the current DH theme.\n */\n static initTheme(): void {\n const { removeHashtag } = MonacoUtils;\n\n const MonacoTheme = resolveCssVariablesInRecord(MonacoThemeRaw);\n log.debug2('Monaco theme:', MonacoThemeRaw);\n log.debug2('Monaco theme derived:', MonacoTheme);\n\n const dhDarkRules = [\n { token: '', foreground: removeHashtag(MonacoTheme.foreground) },\n { token: 'string', foreground: removeHashtag(MonacoTheme.string) },\n {\n token: 'string.delim',\n foreground: removeHashtag(MonacoTheme['string-delim']),\n },\n { token: 'keyword', foreground: removeHashtag(MonacoTheme.keyword) },\n {\n token: 'identifier.js',\n foreground: removeHashtag(MonacoTheme['identifier-js']),\n },\n {\n token: 'delimiter',\n foreground: removeHashtag(MonacoTheme.delimiter),\n },\n { token: 'comment', foreground: removeHashtag(MonacoTheme.comment) },\n { token: 'number', foreground: removeHashtag(MonacoTheme.number) },\n { token: 'storage', foreground: removeHashtag(MonacoTheme.storage) },\n {\n token: 'identifier',\n foreground: removeHashtag(MonacoTheme.identifier),\n },\n {\n token: 'namespace.identifier',\n foreground: removeHashtag(MonacoTheme['namespace-identifier']),\n },\n { token: 'operator', foreground: removeHashtag(MonacoTheme.operator) },\n {\n token: 'predefined',\n foreground: removeHashtag(MonacoTheme.predefined),\n },\n {\n token: 'error.log',\n foreground: MonacoTheme['log-error']?.substring(1) ?? '',\n },\n {\n token: 'warn.log',\n foreground: removeHashtag(MonacoTheme['log-warn']),\n },\n {\n token: 'info.log',\n foreground: removeHashtag(MonacoTheme['log-info']),\n },\n {\n token: 'stdout.log',\n foreground: removeHashtag(MonacoTheme['log-stdout']),\n },\n {\n token: 'trace.log',\n foreground: removeHashtag(MonacoTheme['log-trace']),\n },\n {\n token: 'debug.log',\n foreground: removeHashtag(MonacoTheme['log-debug']),\n },\n {\n token: 'date.log',\n foreground: removeHashtag(MonacoTheme['log-date']),\n },\n ];\n\n const dhDarkColors = {\n foreground: MonacoTheme.foreground,\n errorForeground: MonacoTheme['error-foreground'],\n 'inputOption.activeBorder': MonacoTheme['input-option-active-border'],\n 'editor.background': MonacoTheme.background,\n 'editor.foreground': MonacoTheme.foreground,\n 'editor.lineHighlightBackground':\n MonacoTheme['editor-line-highlight-background'],\n 'editorLineNumber.foreground':\n MonacoTheme['editor-line-number-foreground'],\n 'editorLineNumber.activeForeground':\n MonacoTheme['editor-line-number-active-foreground'],\n 'editor.selectionBackground': MonacoTheme['editor-selection-background'],\n 'editor.inactiveSelectionBackground':\n MonacoTheme['editor-inactive-selection-background'],\n 'editor.selectionHighlightBackground':\n MonacoTheme['editor-selection-highlight-background'],\n 'editor.wordHighlightBackground':\n MonacoTheme['editor-word-highlight-background'],\n 'editor.findMatchBackground': MonacoTheme['editor-find-match-background'],\n 'editor.findMatchHighlightBackground':\n MonacoTheme['editor-find-match-highlight-background'],\n 'editorSuggestWidget.background':\n MonacoTheme['editor-suggest-widget-background'],\n 'editorSuggestWidget.border': MonacoTheme['editor-suggest-widget-border'],\n 'editorSuggestWidget.foreground':\n MonacoTheme['editor-suggest-widget-foreground'],\n 'editorSuggestWidget.selectedBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'list.activeSelectionBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'editorSuggestWidget.selectedForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'list.activeSelectionForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'editorSuggestWidget.highlightForeground':\n MonacoTheme['editor-suggest-widget-highlightForeground'],\n 'editorSuggestWidget.focusHighlightForeground':\n MonacoTheme['editor-suggest-widget-focus-highlight-foreground'],\n 'list.hoverBackground': MonacoTheme['list-hover-background'],\n 'dropdown.background': MonacoTheme['context-menu-background'],\n 'dropdown.foreground': MonacoTheme['context-menu-foreground'],\n 'menu.selectionBackground': MonacoTheme['menu-selection-background'],\n 'menu.selectionForeground': MonacoTheme['menu-selection-foreground'],\n 'keybindingLabel.foreground': MonacoTheme['menu-selection-foreground'],\n 'list.focusBackground': MonacoTheme['menu-selection-background'],\n 'editorWidget.background': MonacoTheme['editor-widget-background'],\n 'inputOption.activeBackground':\n MonacoTheme['input-option-active-background'],\n 'inputOption.activeForeground':\n MonacoTheme['input-option-active-foreground'],\n focusBorder: MonacoTheme['focus-border'],\n 'input.background': MonacoTheme['input-background'],\n 'input.foreground': MonacoTheme['input-foreground'],\n 'input.border': MonacoTheme['input-border'],\n 'textLink.foreground': MonacoTheme['text-link-foreground'],\n 'textLink.activeForeground': MonacoTheme['text-link-active-foreground'],\n 'editorLink.activeForeground':\n MonacoTheme['editor-link-active-foreground'],\n 'editorBracketHighlight.foreground1':\n MonacoTheme['editor-bracket-foreground1'],\n 'editorBracketHighlight.foreground2':\n MonacoTheme['editor-bracket-foreground2'],\n 'editorBracketHighlight.foreground3':\n MonacoTheme['editor-bracket-foreground3'],\n 'editorBracketHighlight.foreground4':\n MonacoTheme['editor-bracket-foreground4'],\n 'editorBracketHighlight.foreground5':\n MonacoTheme['editor-bracket-foreground5'],\n 'editorBracketHighlight.foreground6':\n MonacoTheme['editor-bracket-foreground6'],\n 'editorBracketHighlight.unexpectedBracket.foreground':\n MonacoTheme['editor-unexpected-bracket-foreground'],\n };\n\n monaco.editor.defineTheme('dh-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: dhDarkRules,\n colors: dhDarkColors,\n });\n\n try {\n monaco.editor.setTheme('dh-dark');\n } catch (err) {\n log.error(\n `Failed to set 'dh-dark' Monaco theme, falling back to vs-dark`,\n err\n );\n monaco.editor.setTheme('vs-dark');\n }\n }\n\n /**\n * Register the getWorker function for Monaco\n * @param getWorker The getWorker function for Monaco\n */\n static registerGetWorker(getWorker: Environment['getWorker']): void {\n window.MonacoEnvironment = {\n ...window.MonacoEnvironment,\n getWorker,\n };\n }\n\n /**\n * Remove the hashtag prefix from a CSS color string.\n * Monaco expects colors to be the value only, no hashtag.\n * @param color The hex color string to remove the hashtag from, eg. '#ffffff'\n */\n static removeHashtag(color?: string): string {\n return color?.substring(1) ?? '';\n }\n\n static registerLanguages(languages: Language[]): void {\n // First override the default loader for any language we have a custom definition for\n // https://github.com/Microsoft/monaco-editor/issues/252#issuecomment-482786867\n const languageIds = languages.map(({ id }) => id);\n monaco.languages\n .getLanguages()\n .filter(({ id }) => languageIds.includes(id))\n .forEach(languageParam => {\n const language = languageParam;\n log.debug2('Overriding default language loader:', language.id);\n });\n\n // Then register our language definitions\n languages.forEach(language => {\n MonacoUtils.registerLanguage(language);\n });\n }\n\n static registerLanguage(language: Language): void {\n log.debug2('Registering language: ', language.id);\n monaco.languages.register(language);\n\n monaco.languages.onLanguage(language.id, () => {\n monaco.languages.setLanguageConfiguration(language.id, language.conf);\n monaco.languages.setMonarchTokensProvider(language.id, language.language);\n });\n }\n\n /**\n * Set EOL preference for the editor\n * @param editor The editor to set the EOL for\n * @param eolSequence EOL sequence\n */\n static setEOL(\n editor: monaco.editor.IStandaloneCodeEditor,\n eolSequence = monaco.editor.EndOfLineSequence.LF\n ): void {\n editor.getModel()?.setEOL(eolSequence);\n }\n\n /**\n * Links an editor with a provided session to provide completion items.\n * @param session The IdeSession to link\n * @param editor The editor to link the session to\n * @returns A cleanup function for disposing of the created listeners\n */\n static openDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: dh.IdeSession\n ): monaco.IDisposable {\n const model = editor.getModel();\n assertNotNull(model);\n const didOpenDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n languageId: model.getLanguageId(),\n version: model.getVersionId(),\n text: model.getValue(),\n },\n };\n log.debug2('didOpenDocumentParams: ', didOpenDocumentParams);\n\n session.openDocument(didOpenDocumentParams);\n\n const dispose = editor.onDidChangeModelContent(changedEvent => {\n const { changes, versionId } = changedEvent;\n\n const contentChanges = [];\n for (let i = 0; i < changes.length; i += 1) {\n const change = changes[i];\n const { range, rangeLength, text } = change;\n const contentChange = {\n range: {\n start: {\n line: range.startLineNumber - 1,\n character: range.startColumn - 1,\n },\n end: {\n line: range.endLineNumber - 1,\n character: range.endColumn - 1,\n },\n },\n rangeLength,\n text,\n };\n\n contentChanges.push(contentChange);\n }\n\n if (contentChanges.length > 0) {\n const didChangeDocumentParams = {\n textDocument: {\n version: versionId,\n uri: `${model.uri}`,\n },\n contentChanges,\n };\n log.debug2('didChangeDocumentParams', didChangeDocumentParams);\n session.changeDocument(didChangeDocumentParams);\n }\n });\n\n return dispose;\n }\n\n static closeDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: dh.IdeSession\n ): void {\n const model = editor.getModel();\n assertNotNull(model);\n const didCloseDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n },\n };\n session.closeDocument(didCloseDocumentParams);\n }\n\n /**\n * Register a paste handle to clean up any garbage code pasted.\n * Most of this comes from copying from Slack, which has a bad habit of injecting their own characters in your code snippets.\n * I've emailed Slack about the issue and they're working on it. I can't reference a ticket number because their ticket system is entirely internally facing.\n * @param editor The editor the register the paste handler for\n */\n static registerPasteHandler(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n editor.onDidPaste(pasteEvent => {\n const smartQuotes = /“|”/g;\n const invalidChars = /\\u200b/g; // zero width space\n const invalidSpaces = /\\u00A0/g; // non-breaking space\n const editorModel = editor.getModel();\n assertNotNull(editorModel);\n const pastedText = editorModel.getValueInRange(pasteEvent.range);\n if (\n smartQuotes.test(pastedText) ||\n invalidChars.test(pastedText) ||\n invalidSpaces.test(pastedText)\n ) {\n editorModel.applyEdits([\n {\n range: pasteEvent.range,\n text: pastedText\n .replace(smartQuotes, '\"')\n .replace(invalidChars, '')\n .replace(invalidSpaces, ' '),\n },\n ]);\n }\n });\n }\n\n static isMacPlatform(): boolean {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Remove any keybindings which are used for our own shortcuts.\n * This allows the key events to bubble up so a component higher up can capture\n * them. Note that this is a global configuration, so all editor instances will\n * be impacted.\n */\n static removeConflictingKeybindings(): void {\n // All editor instances share a global keybinding registry which is where\n // default keybindings are set. There doesn't appear to be a way to remove\n // default bindings, but we can add new ones that will override the existing\n // ones and set `command` to null. This will treat the key events as unhandled\n // and allow them to bubble up.\n monaco.editor.addKeybindingRule(\n // Restart console in Enterprise (see Shortcuts.ts)\n {\n /* eslint-disable-next-line no-bitwise */\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyD,\n command: null,\n }\n );\n\n // Ctrl+H is used to focus Community console history in Windows + Linux.\n // An alternate shortcut is used for Mac, so no need to override it\n // (See ConsoleShortcuts.ts)\n if (!MonacoUtils.isMacPlatform()) {\n monaco.editor.addKeybindingRule({\n /* eslint-disable-next-line no-bitwise */\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyH,\n command: null,\n });\n }\n }\n\n /**\n * Creates actions with a `noop` run function to disable specified keybindings.\n * Note that this will swallow the events. To disable default keybindings in a\n * way that allows events to propagate upward, see `removeConflictingKeybindings`\n * @param editor Editor to disable keybindings for\n * @param keybindings List of monaco keybindings to disable. Often a bitwise\n * combination like `monaco.KeyMod.Alt | monaco.KeyMod.KeyJ`\n */\n static disableKeyBindings(\n editor: monaco.editor.IStandaloneCodeEditor,\n keybindings: number[]\n ): void {\n editor.addAction({\n // This shouldn't be referenced by anything so using an arbitrary unique id\n id: `disable-keybindings-${nanoid()}`,\n label: '', // This action won't be shown in the UI so no need for a label\n keybindings,\n run: () => undefined,\n });\n }\n\n static getMonacoKeyCodeFromShortcut(shortcut: Shortcut): number {\n const { keyState } = shortcut;\n const { keyValue } = keyState;\n if (keyValue === null) {\n return 0;\n }\n\n const isMac = MonacoUtils.isMacPlatform();\n\n if (isMac) {\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.metaKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.ctrlKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.ctrlKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.metaKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n static provideLinks(model: monaco.editor.ITextModel): {\n links: monaco.languages.ILink[];\n } {\n const newTokens: monaco.languages.ILink[] = [];\n\n for (let i = 1; i <= model.getLineCount(); i += 1) {\n const lineText = model.getLineContent(i);\n const originalTokens = linkifyFind(lineText);\n\n const tokens = originalTokens.filter(token => {\n if (token.type === 'url') {\n return /^https?:\\/\\//.test(token.value);\n }\n return true;\n });\n // map the tokens to the ranges - you know the line number now, use the token start/end as the startColumn/endColumn\n tokens.forEach(token => {\n newTokens.push({\n url: token.href,\n range: new monaco.Range(i, token.start + 1, i, token.end + 1),\n });\n });\n }\n\n return {\n links: newTokens,\n };\n }\n\n /**\n * Generates a console URI for use with monaco.\n * @returns A new console URI\n */\n static generateConsoleUri(): monaco.Uri {\n return monaco.Uri.parse(`${CONSOLE_URI_PREFIX}${nanoid()}`);\n }\n\n /**\n * Checks if a model is a console model based on its URI.\n * @param model The monaco model to check\n * @returns If the model is a console model\n */\n static isConsoleModel(model: monaco.editor.ITextModel): boolean {\n return model.uri.toString().startsWith(CONSOLE_URI_PREFIX);\n }\n\n /**\n * Checks if the editor has the formatDocument action registered.\n * @param editor The monaco editor to check\n * @returns If the editor has a document formatter registered\n */\n static canFormat(editor: monaco.editor.IStandaloneCodeEditor): boolean {\n return (\n editor.getAction('editor.action.formatDocument')?.isSupported() === true\n );\n }\n\n /**\n * Runs the formatDocument action on the editor.\n * @param editor The editor to format\n */\n static async formatDocument(\n editor: monaco.editor.IStandaloneCodeEditor\n ): Promise<void> {\n await editor.getAction('editor.action.formatDocument')?.run();\n }\n}\n\nexport default MonacoUtils;\n"],"mappings":";;;;;;;AAAA;AACA,SAASA,MAAM,QAAQ,QAAQ;AAC/B,OAAOC,QAAQ,MAAM,iBAAiB;AACtC;AACA;AACA;AACA,SACEC,2BAA2B,QAEtB,uBAAuB;AAE9B,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,IAAI,IAAIC,WAAW,QAAQ,WAAW;AAC/C,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC;AACA,SAASC,YAAY,QAAQ,8CAA8C;AAC3E,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,cAAc;AAAA,OACdC,MAAM;AAAA,OACNC,UAAU;AAAA,OACVC,SAAS;AAAA,OACTC,MAAM;AAAA,OACNC,OAAO;AAAA,OAEPC,eAAe;AAEtB,IAAMC,GAAG,GAAGR,GAAG,CAACS,MAAM,CAAC,aAAa,CAAC;AAErC,IAAMC,kBAAkB,GAAG,wBAAwB;AAQnD,MAAMC,WAAW,CAAC;EAChB;AACF;AACA;AACA;AACA;EACE,OAAOC,IAAIA,CAAA,EAE6C;IAAA,IAF5C;MACVC;IACwC,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAC9CN,GAAG,CAACS,KAAK,CAAC,wBAAwB,CAAC;IAEnC,IAAIJ,SAAS,KAAKG,SAAS,EAAE;MAC3BL,WAAW,CAACO,iBAAiB,CAACL,SAAS,CAAC;IAC1C;IAEA,IAAM;MAAEM,SAAS;MAAEC;IAAkB,CAAC,GAAGT,WAAW;IAEpDQ,SAAS,CAAC,CAAC;IAEXC,iBAAiB,CAAC,CAACf,MAAM,EAAEH,MAAM,EAAEC,UAAU,EAAEG,OAAO,EAAEF,SAAS,CAAC,CAAC;IAEnEN,MAAM,CAACuB,SAAS,CAACC,UAAU,CAAC,QAAQ,EAAE,MAAM;MAC1CxB,MAAM,CAACuB,SAAS,CAACE,0BAA0B,CACzC,QAAQ,EACR;QACEC,kBAAkB,EAAEjB,eAAe,CAACkB;MACtC,CAAC,EACD;QAAEC,uBAAuB,EAAE,CAAC,UAAU;MAAE,CAC1C,CAAC;MAED5B,MAAM,CAACuB,SAAS,CAACM,sCAAsC,CAAC,QAAQ,EAAE;QAChEC,8BAA8B,EAC5BrB,eAAe,CAACsB;MACpB,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF/B,MAAM,CAACgC,MAAM,CAACC,gBAAgB,CAACC,KAAK,IAAI;MACtC;MACA,IAAIA,KAAK,CAACC,aAAa,CAAC,CAAC,KAAK,QAAQ,EAAE;QACtC,IAAI1B,eAAe,CAAC2B,aAAa,IAAI,IAAI,EAAE;UACzC3B,eAAe,CAAC4B,UAAU,CAACH,KAAK,CAAC;QACnC;QAEA,IAAMI,aAAa,GAAG3C,QAAQ,CAC3B4C,CAA2B,IAAK9B,eAAe,CAAC4B,UAAU,CAACE,CAAC,CAAC,EAC9D,GACF,CAAC;QAEDL,KAAK,CAACM,kBAAkB,CAAC,MAAM;UAC7BF,aAAa,CAACJ,KAAK,CAAC;QACtB,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;IAEFrB,WAAW,CAAC4B,4BAA4B,CAAC,CAAC;IAE1C/B,GAAG,CAACS,KAAK,CAAC,qBAAqB,CAAC;EAClC;;EAEA;AACF;AACA;EACE,OAAOE,SAASA,CAAA,EAAS;IAAA,IAAAqB,oBAAA,EAAAC,qBAAA;IACvB,IAAM;MAAEC;IAAc,CAAC,GAAG/B,WAAW;IAErC,IAAMgC,WAAW,GAAGjD,2BAA2B,CAACO,cAAc,CAAC;IAC/DO,GAAG,CAACoC,MAAM,CAAC,eAAe,EAAE3C,cAAc,CAAC;IAC3CO,GAAG,CAACoC,MAAM,CAAC,uBAAuB,EAAED,WAAW,CAAC;IAEhD,IAAME,WAAW,GAAG,CAClB;MAAEC,KAAK,EAAE,EAAE;MAAEC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAACI,UAAU;IAAE,CAAC,EAChE;MAAED,KAAK,EAAE,QAAQ;MAAEC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAACK,MAAM;IAAE,CAAC,EAClE;MACEF,KAAK,EAAE,cAAc;MACrBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAAC,cAAc,CAAC;IACvD,CAAC,EACD;MAAEG,KAAK,EAAE,SAAS;MAAEC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAACM,OAAO;IAAE,CAAC,EACpE;MACEH,KAAK,EAAE,eAAe;MACtBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAAC,eAAe,CAAC;IACxD,CAAC,EACD;MACEG,KAAK,EAAE,WAAW;MAClBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAACO,SAAS;IACjD,CAAC,EACD;MAAEJ,KAAK,EAAE,SAAS;MAAEC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAACQ,OAAO;IAAE,CAAC,EACpE;MAAEL,KAAK,EAAE,QAAQ;MAAEC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAACS,MAAM;IAAE,CAAC,EAClE;MAAEN,KAAK,EAAE,SAAS;MAAEC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAACU,OAAO;IAAE,CAAC,EACpE;MACEP,KAAK,EAAE,YAAY;MACnBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAACW,UAAU;IAClD,CAAC,EACD;MACER,KAAK,EAAE,sBAAsB;MAC7BC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAAC,sBAAsB,CAAC;IAC/D,CAAC,EACD;MAAEG,KAAK,EAAE,UAAU;MAAEC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAACY,QAAQ;IAAE,CAAC,EACtE;MACET,KAAK,EAAE,YAAY;MACnBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAACa,UAAU;IAClD,CAAC,EACD;MACEV,KAAK,EAAE,WAAW;MAClBC,UAAU,GAAAP,oBAAA,IAAAC,qBAAA,GAAEE,WAAW,CAAC,WAAW,CAAC,cAAAF,qBAAA,uBAAxBA,qBAAA,CAA0BgB,SAAS,CAAC,CAAC,CAAC,cAAAjB,oBAAA,cAAAA,oBAAA,GAAI;IACxD,CAAC,EACD;MACEM,KAAK,EAAE,UAAU;MACjBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAAC,UAAU,CAAC;IACnD,CAAC,EACD;MACEG,KAAK,EAAE,UAAU;MACjBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAAC,UAAU,CAAC;IACnD,CAAC,EACD;MACEG,KAAK,EAAE,YAAY;MACnBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAAC,YAAY,CAAC;IACrD,CAAC,EACD;MACEG,KAAK,EAAE,WAAW;MAClBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAAC,WAAW,CAAC;IACpD,CAAC,EACD;MACEG,KAAK,EAAE,WAAW;MAClBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAAC,WAAW,CAAC;IACpD,CAAC,EACD;MACEG,KAAK,EAAE,UAAU;MACjBC,UAAU,EAAEL,aAAa,CAACC,WAAW,CAAC,UAAU,CAAC;IACnD,CAAC,CACF;IAED,IAAMe,YAAY,GAAG;MACnBX,UAAU,EAAEJ,WAAW,CAACI,UAAU;MAClCY,eAAe,EAAEhB,WAAW,CAAC,kBAAkB,CAAC;MAChD,0BAA0B,EAAEA,WAAW,CAAC,4BAA4B,CAAC;MACrE,mBAAmB,EAAEA,WAAW,CAACiB,UAAU;MAC3C,mBAAmB,EAAEjB,WAAW,CAACI,UAAU;MAC3C,gCAAgC,EAC9BJ,WAAW,CAAC,kCAAkC,CAAC;MACjD,6BAA6B,EAC3BA,WAAW,CAAC,+BAA+B,CAAC;MAC9C,mCAAmC,EACjCA,WAAW,CAAC,sCAAsC,CAAC;MACrD,4BAA4B,EAAEA,WAAW,CAAC,6BAA6B,CAAC;MACxE,oCAAoC,EAClCA,WAAW,CAAC,sCAAsC,CAAC;MACrD,qCAAqC,EACnCA,WAAW,CAAC,uCAAuC,CAAC;MACtD,gCAAgC,EAC9BA,WAAW,CAAC,kCAAkC,CAAC;MACjD,4BAA4B,EAAEA,WAAW,CAAC,8BAA8B,CAAC;MACzE,qCAAqC,EACnCA,WAAW,CAAC,wCAAwC,CAAC;MACvD,gCAAgC,EAC9BA,WAAW,CAAC,kCAAkC,CAAC;MACjD,4BAA4B,EAAEA,WAAW,CAAC,8BAA8B,CAAC;MACzE,gCAAgC,EAC9BA,WAAW,CAAC,kCAAkC,CAAC;MACjD,wCAAwC,EACtCA,WAAW,CAAC,2CAA2C,CAAC;MAC1D,gCAAgC,EAC9BA,WAAW,CAAC,2CAA2C,CAAC;MAC1D,wCAAwC,EACtCA,WAAW,CAAC,2CAA2C,CAAC;MAC1D,gCAAgC,EAC9BA,WAAW,CAAC,2CAA2C,CAAC;MAC1D,yCAAyC,EACvCA,WAAW,CAAC,2CAA2C,CAAC;MAC1D,8CAA8C,EAC5CA,WAAW,CAAC,kDAAkD,CAAC;MACjE,sBAAsB,EAAEA,WAAW,CAAC,uBAAuB,CAAC;MAC5D,qBAAqB,EAAEA,WAAW,CAAC,yBAAyB,CAAC;MAC7D,qBAAqB,EAAEA,WAAW,CAAC,yBAAyB,CAAC;MAC7D,0BAA0B,EAAEA,WAAW,CAAC,2BAA2B,CAAC;MACpE,0BAA0B,EAAEA,WAAW,CAAC,2BAA2B,CAAC;MACpE,4BAA4B,EAAEA,WAAW,CAAC,2BAA2B,CAAC;MACtE,sBAAsB,EAAEA,WAAW,CAAC,2BAA2B,CAAC;MAChE,yBAAyB,EAAEA,WAAW,CAAC,0BAA0B,CAAC;MAClE,8BAA8B,EAC5BA,WAAW,CAAC,gCAAgC,CAAC;MAC/C,8BAA8B,EAC5BA,WAAW,CAAC,gCAAgC,CAAC;MAC/CkB,WAAW,EAAElB,WAAW,CAAC,cAAc,CAAC;MACxC,kBAAkB,EAAEA,WAAW,CAAC,kBAAkB,CAAC;MACnD,kBAAkB,EAAEA,WAAW,CAAC,kBAAkB,CAAC;MACnD,cAAc,EAAEA,WAAW,CAAC,cAAc,CAAC;MAC3C,qBAAqB,EAAEA,WAAW,CAAC,sBAAsB,CAAC;MAC1D,2BAA2B,EAAEA,WAAW,CAAC,6BAA6B,CAAC;MACvE,6BAA6B,EAC3BA,WAAW,CAAC,+BAA+B,CAAC;MAC9C,oCAAoC,EAClCA,WAAW,CAAC,4BAA4B,CAAC;MAC3C,oCAAoC,EAClCA,WAAW,CAAC,4BAA4B,CAAC;MAC3C,oCAAoC,EAClCA,WAAW,CAAC,4BAA4B,CAAC;MAC3C,oCAAoC,EAClCA,WAAW,CAAC,4BAA4B,CAAC;MAC3C,oCAAoC,EAClCA,WAAW,CAAC,4BAA4B,CAAC;MAC3C,oCAAoC,EAClCA,WAAW,CAAC,4BAA4B,CAAC;MAC3C,qDAAqD,EACnDA,WAAW,CAAC,sCAAsC;IACtD,CAAC;IAED7C,MAAM,CAACgC,MAAM,CAACgC,WAAW,CAAC,SAAS,EAAE;MACnCC,IAAI,EAAE,SAAS;MACfC,OAAO,EAAE,IAAI;MACbC,KAAK,EAAEpB,WAAW;MAClBqB,MAAM,EAAER;IACV,CAAC,CAAC;IAEF,IAAI;MACF5D,MAAM,CAACgC,MAAM,CAACqC,QAAQ,CAAC,SAAS,CAAC;IACnC,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZ5D,GAAG,CAAC6D,KAAK,kEAEPD,GACF,CAAC;MACDtE,MAAM,CAACgC,MAAM,CAACqC,QAAQ,CAAC,SAAS,CAAC;IACnC;EACF;;EAEA;AACF;AACA;AACA;EACE,OAAOjD,iBAAiBA,CAACL,SAAmC,EAAQ;IAClEyD,MAAM,CAACC,iBAAiB,GAAAC,aAAA,CAAAA,aAAA,KACnBF,MAAM,CAACC,iBAAiB;MAC3B1D;IAAS,EACV;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAO6B,aAAaA,CAAC+B,KAAc,EAAU;IAAA,IAAAC,gBAAA;IAC3C,QAAAA,gBAAA,GAAOD,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEhB,SAAS,CAAC,CAAC,CAAC,cAAAiB,gBAAA,cAAAA,gBAAA,GAAI,EAAE;EAClC;EAEA,OAAOtD,iBAAiBA,CAACC,SAAqB,EAAQ;IACpD;IACA;IACA,IAAMsD,WAAW,GAAGtD,SAAS,CAACuD,GAAG,CAACC,IAAA;MAAA,IAAC;QAAEC;MAAG,CAAC,GAAAD,IAAA;MAAA,OAAKC,EAAE;IAAA,EAAC;IACjDhF,MAAM,CAACuB,SAAS,CACb0D,YAAY,CAAC,CAAC,CACdC,MAAM,CAACC,KAAA;MAAA,IAAC;QAAEH;MAAG,CAAC,GAAAG,KAAA;MAAA,OAAKN,WAAW,CAACO,QAAQ,CAACJ,EAAE,CAAC;IAAA,EAAC,CAC5CK,OAAO,CAACC,aAAa,IAAI;MACxB,IAAMC,QAAQ,GAAGD,aAAa;MAC9B5E,GAAG,CAACoC,MAAM,CAAC,qCAAqC,EAAEyC,QAAQ,CAACP,EAAE,CAAC;IAChE,CAAC,CAAC;;IAEJ;IACAzD,SAAS,CAAC8D,OAAO,CAACE,QAAQ,IAAI;MAC5B1E,WAAW,CAAC2E,gBAAgB,CAACD,QAAQ,CAAC;IACxC,CAAC,CAAC;EACJ;EAEA,OAAOC,gBAAgBA,CAACD,QAAkB,EAAQ;IAChD7E,GAAG,CAACoC,MAAM,CAAC,wBAAwB,EAAEyC,QAAQ,CAACP,EAAE,CAAC;IACjDhF,MAAM,CAACuB,SAAS,CAACkE,QAAQ,CAACF,QAAQ,CAAC;IAEnCvF,MAAM,CAACuB,SAAS,CAACC,UAAU,CAAC+D,QAAQ,CAACP,EAAE,EAAE,MAAM;MAC7ChF,MAAM,CAACuB,SAAS,CAACmE,wBAAwB,CAACH,QAAQ,CAACP,EAAE,EAAEO,QAAQ,CAACI,IAAI,CAAC;MACrE3F,MAAM,CAACuB,SAAS,CAACqE,wBAAwB,CAACL,QAAQ,CAACP,EAAE,EAAEO,QAAQ,CAACA,QAAQ,CAAC;IAC3E,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOM,MAAMA,CACX7D,MAA2C,EAErC;IAAA,IAAA8D,gBAAA;IAAA,IADNC,WAAW,GAAA/E,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGhB,MAAM,CAACgC,MAAM,CAACgE,iBAAiB,CAACC,EAAE;IAEhD,CAAAH,gBAAA,GAAA9D,MAAM,CAACkE,QAAQ,CAAC,CAAC,cAAAJ,gBAAA,uBAAjBA,gBAAA,CAAmBD,MAAM,CAACE,WAAW,CAAC;EACxC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOI,YAAYA,CACjBnE,MAA2C,EAC3CoE,OAAsB,EACF;IACpB,IAAMlE,KAAK,GAAGF,MAAM,CAACkE,QAAQ,CAAC,CAAC;IAC/BrG,aAAa,CAACqC,KAAK,CAAC;IACpB,IAAMmE,qBAAqB,GAAG;MAC5BC,YAAY,EAAE;QACZC,GAAG,KAAAC,MAAA,CAAKtE,KAAK,CAACqE,GAAG,CAAE;QACnBE,UAAU,EAAEvE,KAAK,CAACC,aAAa,CAAC,CAAC;QACjCuE,OAAO,EAAExE,KAAK,CAACyE,YAAY,CAAC,CAAC;QAC7BC,IAAI,EAAE1E,KAAK,CAAC2E,QAAQ,CAAC;MACvB;IACF,CAAC;IACDnG,GAAG,CAACoC,MAAM,CAAC,yBAAyB,EAAEuD,qBAAqB,CAAC;IAE5DD,OAAO,CAACD,YAAY,CAACE,qBAAqB,CAAC;IAE3C,IAAMS,OAAO,GAAG9E,MAAM,CAAC+E,uBAAuB,CAACC,YAAY,IAAI;MAC7D,IAAM;QAAEC,OAAO;QAAEC;MAAU,CAAC,GAAGF,YAAY;MAE3C,IAAMG,cAAc,GAAG,EAAE;MACzB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,OAAO,CAAChG,MAAM,EAAEmG,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAMC,MAAM,GAAGJ,OAAO,CAACG,CAAC,CAAC;QACzB,IAAM;UAAEE,KAAK;UAAEC,WAAW;UAAEX;QAAK,CAAC,GAAGS,MAAM;QAC3C,IAAMG,aAAa,GAAG;UACpBF,KAAK,EAAE;YACLG,KAAK,EAAE;cACLC,IAAI,EAAEJ,KAAK,CAACK,eAAe,GAAG,CAAC;cAC/BC,SAAS,EAAEN,KAAK,CAACO,WAAW,GAAG;YACjC,CAAC;YACDC,GAAG,EAAE;cACHJ,IAAI,EAAEJ,KAAK,CAACS,aAAa,GAAG,CAAC;cAC7BH,SAAS,EAAEN,KAAK,CAACU,SAAS,GAAG;YAC/B;UACF,CAAC;UACDT,WAAW;UACXX;QACF,CAAC;QAEDO,cAAc,CAACc,IAAI,CAACT,aAAa,CAAC;MACpC;MAEA,IAAIL,cAAc,CAAClG,MAAM,GAAG,CAAC,EAAE;QAC7B,IAAMiH,uBAAuB,GAAG;UAC9B5B,YAAY,EAAE;YACZI,OAAO,EAAEQ,SAAS;YAClBX,GAAG,KAAAC,MAAA,CAAKtE,KAAK,CAACqE,GAAG;UACnB,CAAC;UACDY;QACF,CAAC;QACDzG,GAAG,CAACoC,MAAM,CAAC,yBAAyB,EAAEoF,uBAAuB,CAAC;QAC9D9B,OAAO,CAAC+B,cAAc,CAACD,uBAAuB,CAAC;MACjD;IACF,CAAC,CAAC;IAEF,OAAOpB,OAAO;EAChB;EAEA,OAAOsB,aAAaA,CAClBpG,MAA2C,EAC3CoE,OAAsB,EAChB;IACN,IAAMlE,KAAK,GAAGF,MAAM,CAACkE,QAAQ,CAAC,CAAC;IAC/BrG,aAAa,CAACqC,KAAK,CAAC;IACpB,IAAMmG,sBAAsB,GAAG;MAC7B/B,YAAY,EAAE;QACZC,GAAG,KAAAC,MAAA,CAAKtE,KAAK,CAACqE,GAAG;MACnB;IACF,CAAC;IACDH,OAAO,CAACgC,aAAa,CAACC,sBAAsB,CAAC;EAC/C;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,oBAAoBA,CACzBtG,MAA2C,EACrC;IACNA,MAAM,CAACuG,UAAU,CAACC,UAAU,IAAI;MAC9B,IAAMC,WAAW,GAAG,MAAM;MAC1B,IAAMC,YAAY,GAAG,SAAS,CAAC,CAAC;MAChC,IAAMC,aAAa,GAAG,SAAS,CAAC,CAAC;MACjC,IAAMC,WAAW,GAAG5G,MAAM,CAACkE,QAAQ,CAAC,CAAC;MACrCrG,aAAa,CAAC+I,WAAW,CAAC;MAC1B,IAAMC,UAAU,GAAGD,WAAW,CAACE,eAAe,CAACN,UAAU,CAAClB,KAAK,CAAC;MAChE,IACEmB,WAAW,CAACM,IAAI,CAACF,UAAU,CAAC,IAC5BH,YAAY,CAACK,IAAI,CAACF,UAAU,CAAC,IAC7BF,aAAa,CAACI,IAAI,CAACF,UAAU,CAAC,EAC9B;QACAD,WAAW,CAACI,UAAU,CAAC,CACrB;UACE1B,KAAK,EAAEkB,UAAU,CAAClB,KAAK;UACvBV,IAAI,EAAEiC,UAAU,CACbI,OAAO,CAACR,WAAW,EAAE,GAAG,CAAC,CACzBQ,OAAO,CAACP,YAAY,EAAE,EAAE,CAAC,CACzBO,OAAO,CAACN,aAAa,EAAE,GAAG;QAC/B,CAAC,CACF,CAAC;MACJ;IACF,CAAC,CAAC;EACJ;EAEA,OAAOO,aAAaA,CAAA,EAAY;IAC9B,IAAM;MAAEC;IAAS,CAAC,GAAG3E,MAAM,CAAC4E,SAAS;IACrC,OAAOD,QAAQ,CAACE,UAAU,CAAC,KAAK,CAAC;EACnC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAO5G,4BAA4BA,CAAA,EAAS;IAC1C;IACA;IACA;IACA;IACA;IACAzC,MAAM,CAACgC,MAAM,CAACsH,iBAAiB;IAC7B;IACA;MACE;MACAC,UAAU,EAAEvJ,MAAM,CAACwJ,MAAM,CAACC,OAAO,GAAGzJ,MAAM,CAAC0J,OAAO,CAACC,IAAI;MACvDC,OAAO,EAAE;IACX,CACF,CAAC;;IAED;IACA;IACA;IACA,IAAI,CAAC/I,WAAW,CAACqI,aAAa,CAAC,CAAC,EAAE;MAChClJ,MAAM,CAACgC,MAAM,CAACsH,iBAAiB,CAAC;QAC9B;QACAC,UAAU,EAAEvJ,MAAM,CAACwJ,MAAM,CAACC,OAAO,GAAGzJ,MAAM,CAAC0J,OAAO,CAACG,IAAI;QACvDD,OAAO,EAAE;MACX,CAAC,CAAC;IACJ;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOE,kBAAkBA,CACvB9H,MAA2C,EAC3C+H,WAAqB,EACf;IACN/H,MAAM,CAACgI,SAAS,CAAC;MACf;MACAhF,EAAE,yBAAAwB,MAAA,CAAyB9G,MAAM,CAAC,CAAC,CAAE;MACrCuK,KAAK,EAAE,EAAE;MAAE;MACXF,WAAW;MACXG,GAAG,EAAEA,CAAA,KAAMhJ;IACb,CAAC,CAAC;EACJ;EAEA,OAAOiJ,4BAA4BA,CAACC,QAAkB,EAAU;IAC9D,IAAM;MAAEC;IAAS,CAAC,GAAGD,QAAQ;IAC7B,IAAM;MAAEE;IAAS,CAAC,GAAGD,QAAQ;IAC7B,IAAIC,QAAQ,KAAK,IAAI,EAAE;MACrB,OAAO,CAAC;IACV;IAEA,IAAMC,KAAK,GAAG1J,WAAW,CAACqI,aAAa,CAAC,CAAC;IAEzC,IAAIqB,KAAK,EAAE;MACT;QACE;QACA,CAACF,QAAQ,CAACG,OAAO,GAAGxK,MAAM,CAACwJ,MAAM,CAACC,OAAO,GAAG,CAAC,KAC5CY,QAAQ,CAACI,QAAQ,GAAGzK,MAAM,CAACwJ,MAAM,CAACkB,KAAK,GAAG,CAAC,CAAC,IAC5CL,QAAQ,CAACM,MAAM,GAAG3K,MAAM,CAACwJ,MAAM,CAACoB,GAAG,GAAG,CAAC,CAAC,IACxCP,QAAQ,CAACQ,OAAO,GAAG7K,MAAM,CAACwJ,MAAM,CAACsB,OAAO,GAAG,CAAC,CAAC,GAC9C7K,YAAY,CAAC8K,UAAU,CAACT,QAAQ;MAAC;IAErC;IAEA;MACE;MACA,CAACD,QAAQ,CAACQ,OAAO,GAAG7K,MAAM,CAACwJ,MAAM,CAACC,OAAO,GAAG,CAAC,KAC5CY,QAAQ,CAACI,QAAQ,GAAGzK,MAAM,CAACwJ,MAAM,CAACkB,KAAK,GAAG,CAAC,CAAC,IAC5CL,QAAQ,CAACM,MAAM,GAAG3K,MAAM,CAACwJ,MAAM,CAACoB,GAAG,GAAG,CAAC,CAAC,IACxCP,QAAQ,CAACG,OAAO,GAAGxK,MAAM,CAACwJ,MAAM,CAACsB,OAAO,GAAG,CAAC,CAAC,GAC9C7K,YAAY,CAAC8K,UAAU,CAACT,QAAQ;IAAC;EAErC;EAEA,OAAOU,YAAYA,CAAC9I,KAA+B,EAEjD;IACA,IAAM+I,SAAmC,GAAG,EAAE;IAAC,IAAAC,KAAA,YAAAA,MAAA9D,CAAA,EAEI;MACjD,IAAM+D,QAAQ,GAAGjJ,KAAK,CAACkJ,cAAc,CAAChE,CAAC,CAAC;MACxC,IAAMiE,cAAc,GAAGtL,WAAW,CAACoL,QAAQ,CAAC;MAE5C,IAAMG,MAAM,GAAGD,cAAc,CAACnG,MAAM,CAAClC,KAAK,IAAI;QAC5C,IAAIA,KAAK,CAACuI,IAAI,KAAK,KAAK,EAAE;UACxB,OAAO,cAAc,CAACxC,IAAI,CAAC/F,KAAK,CAACwI,KAAK,CAAC;QACzC;QACA,OAAO,IAAI;MACb,CAAC,CAAC;MACF;MACAF,MAAM,CAACjG,OAAO,CAACrC,KAAK,IAAI;QACtBiI,SAAS,CAAChD,IAAI,CAAC;UACbwD,GAAG,EAAEzI,KAAK,CAAC0I,IAAI;UACfpE,KAAK,EAAE,IAAItH,MAAM,CAAC2L,KAAK,CAACvE,CAAC,EAAEpE,KAAK,CAACyE,KAAK,GAAG,CAAC,EAAEL,CAAC,EAAEpE,KAAK,CAAC8E,GAAG,GAAG,CAAC;QAC9D,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAjBD,KAAK,IAAIV,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIlF,KAAK,CAAC0J,YAAY,CAAC,CAAC,EAAExE,CAAC,IAAI,CAAC;MAAA8D,KAAA,CAAA9D,CAAA;IAAA;IAmBjD,OAAO;MACLyE,KAAK,EAAEZ;IACT,CAAC;EACH;;EAEA;AACF;AACA;AACA;EACE,OAAOa,kBAAkBA,CAAA,EAAe;IACtC,OAAO9L,MAAM,CAAC+L,GAAG,CAACC,KAAK,IAAAxF,MAAA,CAAI5F,kBAAkB,EAAA4F,MAAA,CAAG9G,MAAM,CAAC,CAAC,CAAE,CAAC;EAC7D;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOuM,cAAcA,CAAC/J,KAA+B,EAAW;IAC9D,OAAOA,KAAK,CAACqE,GAAG,CAAC2F,QAAQ,CAAC,CAAC,CAAC7C,UAAU,CAACzI,kBAAkB,CAAC;EAC5D;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOuL,SAASA,CAACnK,MAA2C,EAAW;IAAA,IAAAoK,iBAAA;IACrE,OACE,EAAAA,iBAAA,GAAApK,MAAM,CAACqK,SAAS,CAAC,8BAA8B,CAAC,cAAAD,iBAAA,uBAAhDA,iBAAA,CAAkDE,WAAW,CAAC,CAAC,MAAK,IAAI;EAE5E;;EAEA;AACF;AACA;AACA;EACE,OAAaC,cAAcA,CACzBvK,MAA2C,EAC5B;IAAA,OAAAwK,iBAAA;MAAA,IAAAC,kBAAA;MACf,OAAAA,kBAAA,GAAMzK,MAAM,CAACqK,SAAS,CAAC,8BAA8B,CAAC,cAAAI,kBAAA,uBAAhDA,kBAAA,CAAkDvC,GAAG,CAAC,CAAC;IAAC;EAChE;AACF;AAEA,eAAerJ,WAAW"}
@@ -5,7 +5,9 @@ interface RuffSettingsModalProps {
5
5
  isOpen: boolean;
6
6
  onClose: () => void;
7
7
  onSave: (value: Record<string, unknown>) => void;
8
+ readOnly?: boolean;
9
+ defaultSettings?: Record<string, unknown>;
8
10
  }
9
- export default function RuffSettingsModal({ text, isOpen, onClose, onSave, }: RuffSettingsModalProps): React.ReactElement | null;
11
+ export default function RuffSettingsModal({ text, isOpen, onClose, onSave, readOnly, defaultSettings, }: RuffSettingsModalProps): React.ReactElement | null;
10
12
  export {};
11
13
  //# sourceMappingURL=RuffSettingsModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RuffSettingsModal.d.ts","sourceRoot":"","sources":["../../src/monaco/RuffSettingsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAwB7D,OAAO,0BAA0B,CAAC;AAGlC,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAClD;AAoCD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,IAAI,EACJ,MAAM,EACN,OAAO,EACP,MAAM,GACP,EAAE,sBAAsB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CA+HpD"}
1
+ {"version":3,"file":"RuffSettingsModal.d.ts","sourceRoot":"","sources":["../../src/monaco/RuffSettingsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAwBtE,OAAO,0BAA0B,CAAC;AAGlC,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AA8BD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,IAAI,EACJ,MAAM,EACN,OAAO,EACP,MAAM,EACN,QAAgB,EAChB,eAAuC,GACxC,EAAE,sBAAsB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAgJpD"}
@@ -1,6 +1,6 @@
1
1
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
2
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
3
- import React, { useCallback, useRef, useState } from 'react';
3
+ import React, { useCallback, useMemo, useRef, useState } from 'react';
4
4
  import * as monaco from 'monaco-editor';
5
5
  import { Workspace } from '@astral-sh/ruff-wasm-web';
6
6
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
@@ -15,7 +15,7 @@ import "./RuffSettingsModal.css";
15
15
  import MonacoProviders from "./MonacoProviders.js";
16
16
  import { jsxs as _jsxs } from "react/jsx-runtime";
17
17
  import { jsx as _jsx } from "react/jsx-runtime";
18
- var FORMATTED_DEFAULT_SETTINGS = JSON.stringify(RUFF_DEFAULT_SETTINGS, null, 2);
18
+ import { Fragment as _Fragment } from "react/jsx-runtime";
19
19
  var RUFF_SETTINGS_URI = monaco.Uri.parse('inmemory://dh-config/ruff-settings.json');
20
20
  function registerRuffSchema() {
21
21
  var {
@@ -47,11 +47,14 @@ export default function RuffSettingsModal(_ref) {
47
47
  text,
48
48
  isOpen,
49
49
  onClose,
50
- onSave
50
+ onSave,
51
+ readOnly = false,
52
+ defaultSettings = RUFF_DEFAULT_SETTINGS
51
53
  } = _ref;
52
54
  var [isValid, setIsValid] = useState(false);
53
55
  var [isDefault, setIsDefault] = useState(false);
54
56
  var editorRef = useRef();
57
+ var formattedDefaultSettings = useMemo(() => JSON.stringify(defaultSettings, null, 2), [defaultSettings]);
55
58
  var {
56
59
  data: ruffVersion
57
60
  } = usePromiseFactory(getRuffVersion);
@@ -76,8 +79,8 @@ export default function RuffSettingsModal(_ref) {
76
79
  }, [isOpen, handleClose, onSave]);
77
80
  var handleReset = useCallback(() => {
78
81
  assertNotNull(model);
79
- model.setValue(FORMATTED_DEFAULT_SETTINGS);
80
- }, [model]);
82
+ model.setValue(formattedDefaultSettings);
83
+ }, [model, formattedDefaultSettings]);
81
84
  var validate = useCallback(val => {
82
85
  var _editorRef$current2, _editorRef$current2$g;
83
86
  try {
@@ -86,8 +89,8 @@ export default function RuffSettingsModal(_ref) {
86
89
  } catch (_unused2) {
87
90
  setIsValid(false);
88
91
  }
89
- setIsDefault(((_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 ? void 0 : (_editorRef$current2$g = _editorRef$current2.getModel()) === null || _editorRef$current2$g === void 0 ? void 0 : _editorRef$current2$g.getValue()) === FORMATTED_DEFAULT_SETTINGS);
90
- }, []);
92
+ setIsDefault(((_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 ? void 0 : (_editorRef$current2$g = _editorRef$current2.getModel()) === null || _editorRef$current2$g === void 0 ? void 0 : _editorRef$current2$g.getValue()) === formattedDefaultSettings);
93
+ }, [formattedDefaultSettings]);
91
94
  var debouncedValidate = useDebouncedCallback(validate, 500, {
92
95
  leading: true
93
96
  });
@@ -142,6 +145,7 @@ export default function RuffSettingsModal(_ref) {
142
145
  children: /*#__PURE__*/_jsx(Editor, {
143
146
  onEditorInitialized: onEditorInitialized,
144
147
  settings: {
148
+ readOnly,
145
149
  value: text,
146
150
  language: 'json',
147
151
  folding: true,
@@ -153,20 +157,27 @@ export default function RuffSettingsModal(_ref) {
153
157
  model
154
158
  }
155
159
  })
156
- }), /*#__PURE__*/_jsxs(ModalFooter, {
157
- children: [/*#__PURE__*/_jsx(Button, {
160
+ }), /*#__PURE__*/_jsx(ModalFooter, {
161
+ children: readOnly ? /*#__PURE__*/_jsx(Button, {
158
162
  kind: "secondary",
159
163
  "data-dismiss": "modal",
160
164
  onClick: handleClose,
161
- children: "Cancel"
162
- }), /*#__PURE__*/_jsx(Button, {
163
- kind: "primary",
164
- "data-dismiss": "modal",
165
- tooltip: !isValid ? 'Cannot save invalid JSON' : undefined,
166
- disabled: !isValid,
167
- onClick: handleSave,
168
- children: "Save"
169
- })]
165
+ children: "Close"
166
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
167
+ children: [/*#__PURE__*/_jsx(Button, {
168
+ kind: "secondary",
169
+ "data-dismiss": "modal",
170
+ onClick: handleClose,
171
+ children: "Cancel"
172
+ }), /*#__PURE__*/_jsx(Button, {
173
+ kind: "primary",
174
+ "data-dismiss": "modal",
175
+ tooltip: !isValid ? 'Cannot save invalid JSON' : undefined,
176
+ disabled: !isValid,
177
+ onClick: handleSave,
178
+ children: "Save"
179
+ })]
180
+ })
170
181
  })]
171
182
  });
172
183
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RuffSettingsModal.js","names":["React","useCallback","useRef","useState","monaco","Workspace","FontAwesomeIcon","ActionButton","Button","Icon","Link","Modal","ModalBody","ModalFooter","ModalHeader","Text","vsLinkExternal","vsDiscard","useDebouncedCallback","usePromiseFactory","assertNotNull","EMPTY_FUNCTION","Editor","RUFF_DEFAULT_SETTINGS","ruffSchema","MonacoProviders","jsxs","_jsxs","jsx","_jsx","FORMATTED_DEFAULT_SETTINGS","JSON","stringify","RUFF_SETTINGS_URI","Uri","parse","registerRuffSchema","schemas","languages","json","jsonDefaults","diagnosticsOptions","some","schema","uri","setDiagnosticsOptions","fileMatch","toString","getRuffVersion","_getRuffVersion","apply","arguments","_asyncToGenerator","initRuff","concat","version","RuffSettingsModal","_ref","text","isOpen","onClose","onSave","isValid","setIsValid","isDefault","setIsDefault","editorRef","data","ruffVersion","model","editor","createModel","handleClose","current","undefined","dispose","handleSave","_editorRef$current$ge","_editorRef$current","_editorRef$current$ge2","getModel","getValue","_unused","handleReset","setValue","validate","val","_editorRef$current2","_editorRef$current2$g","_unused2","debouncedValidate","leading","onEditorInitialized","onDidChangeContent","centered","keyboard","clickOutside","toggle","size","className","children","closeButton","href","target","kind","onClick","icon","isDisabled","onPress","style","height","settings","value","language","folding","padding","bottom","lineNumbers","overviewRulerLanes","tooltip","disabled"],"sources":["../../src/monaco/RuffSettingsModal.tsx"],"sourcesContent":["import React, { useCallback, useRef, useState } from 'react';\nimport * as monaco from 'monaco-editor';\nimport { Workspace } from '@astral-sh/ruff-wasm-web';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ActionButton,\n Button,\n Icon,\n Link,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n Text,\n} from '@deephaven/components';\nimport { vsLinkExternal, vsDiscard } from '@deephaven/icons';\nimport {\n useDebouncedCallback,\n usePromiseFactory,\n} from '@deephaven/react-hooks';\nimport { assertNotNull, EMPTY_FUNCTION } from '@deephaven/utils';\nimport Editor from '../notebook/Editor';\nimport RUFF_DEFAULT_SETTINGS from './RuffDefaultSettings';\nimport ruffSchema from './ruffSchema';\nimport './RuffSettingsModal.scss';\nimport MonacoProviders from './MonacoProviders';\n\ninterface RuffSettingsModalProps {\n text: string;\n isOpen: boolean;\n onClose: () => void;\n onSave: (value: Record<string, unknown>) => void;\n}\n\nconst FORMATTED_DEFAULT_SETTINGS = JSON.stringify(\n RUFF_DEFAULT_SETTINGS,\n null,\n 2\n);\n\nconst RUFF_SETTINGS_URI = monaco.Uri.parse(\n 'inmemory://dh-config/ruff-settings.json'\n);\n\nfunction registerRuffSchema(): void {\n const { schemas = [] } =\n monaco.languages.json.jsonDefaults.diagnosticsOptions;\n\n if (!schemas.some(schema => schema.uri === 'json://ruff-schema')) {\n // Register the ruff schema so users get validation and completion\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemas: [\n ...schemas,\n {\n uri: 'json://ruff-schema',\n fileMatch: [RUFF_SETTINGS_URI.toString()],\n schema: ruffSchema,\n },\n ],\n });\n }\n}\n\nasync function getRuffVersion(): Promise<string> {\n await MonacoProviders.initRuff();\n return `v${Workspace.version()}`;\n}\n\nexport default function RuffSettingsModal({\n text,\n isOpen,\n onClose,\n onSave,\n}: RuffSettingsModalProps): React.ReactElement | null {\n const [isValid, setIsValid] = useState(false);\n const [isDefault, setIsDefault] = useState(false);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n const { data: ruffVersion } = usePromiseFactory(getRuffVersion);\n\n const [model] = useState(() =>\n monaco.editor.createModel(text, 'json', RUFF_SETTINGS_URI)\n );\n\n const handleClose = useCallback((): void => {\n if (isOpen) {\n onClose();\n editorRef.current = undefined;\n model.dispose();\n }\n }, [isOpen, onClose, model]);\n\n const handleSave = useCallback((): void => {\n if (isOpen) {\n try {\n onSave(JSON.parse(editorRef.current?.getModel()?.getValue() ?? ''));\n } catch {\n // no-op\n }\n handleClose();\n }\n }, [isOpen, handleClose, onSave]);\n\n const handleReset = useCallback((): void => {\n assertNotNull(model);\n model.setValue(FORMATTED_DEFAULT_SETTINGS);\n }, [model]);\n\n const validate = useCallback(val => {\n try {\n JSON.parse(val);\n setIsValid(true);\n } catch {\n setIsValid(false);\n }\n setIsDefault(\n editorRef.current?.getModel()?.getValue() === FORMATTED_DEFAULT_SETTINGS\n );\n }, []);\n\n const debouncedValidate = useDebouncedCallback(validate, 500, {\n leading: true,\n });\n\n const onEditorInitialized = useCallback(\n (editor: monaco.editor.IStandaloneCodeEditor): void => {\n editorRef.current = editor;\n\n model.onDidChangeContent(() => {\n debouncedValidate(model.getValue());\n });\n\n registerRuffSchema();\n debouncedValidate(model.getValue());\n },\n [debouncedValidate, model]\n );\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n centered\n keyboard\n clickOutside={false}\n toggle={handleClose}\n size=\"lg\"\n className=\"ruff-settings-modal\"\n >\n <ModalHeader closeButton={false}>\n <span className=\"settings-modal-title mr-auto\">\n Ruff {ruffVersion} Settings\n </span>\n\n <Link href=\"https://docs.astral.sh/ruff/settings/\" target=\"_blank\">\n <Button kind=\"ghost\" onClick={EMPTY_FUNCTION} icon={vsLinkExternal}>\n Settings Docs\n </Button>\n </Link>\n\n <ActionButton isDisabled={isDefault} onPress={handleReset}>\n <Icon>\n <FontAwesomeIcon icon={vsDiscard} />\n </Icon>\n <Text>Reset to default</Text>\n </ActionButton>\n </ModalHeader>\n <ModalBody style={{ height: '80vh' }}>\n <Editor\n onEditorInitialized={onEditorInitialized}\n settings={{\n value: text,\n language: 'json',\n folding: true,\n padding: { bottom: 16 },\n lineNumbers: 'on',\n overviewRulerLanes: 0,\n model,\n }}\n />\n </ModalBody>\n <ModalFooter>\n <Button kind=\"secondary\" data-dismiss=\"modal\" onClick={handleClose}>\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n data-dismiss=\"modal\"\n tooltip={!isValid ? 'Cannot save invalid JSON' : undefined}\n disabled={!isValid}\n onClick={handleSave}\n >\n Save\n </Button>\n </ModalFooter>\n </Modal>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RuffSettingsModal.js","names":["React","useCallback","useMemo","useRef","useState","monaco","Workspace","FontAwesomeIcon","ActionButton","Button","Icon","Link","Modal","ModalBody","ModalFooter","ModalHeader","Text","vsLinkExternal","vsDiscard","useDebouncedCallback","usePromiseFactory","assertNotNull","EMPTY_FUNCTION","Editor","RUFF_DEFAULT_SETTINGS","ruffSchema","MonacoProviders","jsxs","_jsxs","jsx","_jsx","Fragment","_Fragment","RUFF_SETTINGS_URI","Uri","parse","registerRuffSchema","schemas","languages","json","jsonDefaults","diagnosticsOptions","some","schema","uri","setDiagnosticsOptions","fileMatch","toString","getRuffVersion","_getRuffVersion","apply","arguments","_asyncToGenerator","initRuff","concat","version","RuffSettingsModal","_ref","text","isOpen","onClose","onSave","readOnly","defaultSettings","isValid","setIsValid","isDefault","setIsDefault","editorRef","formattedDefaultSettings","JSON","stringify","data","ruffVersion","model","editor","createModel","handleClose","current","undefined","dispose","handleSave","_editorRef$current$ge","_editorRef$current","_editorRef$current$ge2","getModel","getValue","_unused","handleReset","setValue","validate","val","_editorRef$current2","_editorRef$current2$g","_unused2","debouncedValidate","leading","onEditorInitialized","onDidChangeContent","centered","keyboard","clickOutside","toggle","size","className","children","closeButton","href","target","kind","onClick","icon","isDisabled","onPress","style","height","settings","value","language","folding","padding","bottom","lineNumbers","overviewRulerLanes","tooltip","disabled"],"sources":["../../src/monaco/RuffSettingsModal.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport * as monaco from 'monaco-editor';\nimport { Workspace } from '@astral-sh/ruff-wasm-web';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ActionButton,\n Button,\n Icon,\n Link,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n Text,\n} from '@deephaven/components';\nimport { vsLinkExternal, vsDiscard } from '@deephaven/icons';\nimport {\n useDebouncedCallback,\n usePromiseFactory,\n} from '@deephaven/react-hooks';\nimport { assertNotNull, EMPTY_FUNCTION } from '@deephaven/utils';\nimport Editor from '../notebook/Editor';\nimport RUFF_DEFAULT_SETTINGS from './RuffDefaultSettings';\nimport ruffSchema from './ruffSchema';\nimport './RuffSettingsModal.scss';\nimport MonacoProviders from './MonacoProviders';\n\ninterface RuffSettingsModalProps {\n text: string;\n isOpen: boolean;\n onClose: () => void;\n onSave: (value: Record<string, unknown>) => void;\n readOnly?: boolean;\n defaultSettings?: Record<string, unknown>;\n}\n\nconst RUFF_SETTINGS_URI = monaco.Uri.parse(\n 'inmemory://dh-config/ruff-settings.json'\n);\n\nfunction registerRuffSchema(): void {\n const { schemas = [] } =\n monaco.languages.json.jsonDefaults.diagnosticsOptions;\n\n if (!schemas.some(schema => schema.uri === 'json://ruff-schema')) {\n // Register the ruff schema so users get validation and completion\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemas: [\n ...schemas,\n {\n uri: 'json://ruff-schema',\n fileMatch: [RUFF_SETTINGS_URI.toString()],\n schema: ruffSchema,\n },\n ],\n });\n }\n}\n\nasync function getRuffVersion(): Promise<string> {\n await MonacoProviders.initRuff();\n return `v${Workspace.version()}`;\n}\n\nexport default function RuffSettingsModal({\n text,\n isOpen,\n onClose,\n onSave,\n readOnly = false,\n defaultSettings = RUFF_DEFAULT_SETTINGS,\n}: RuffSettingsModalProps): React.ReactElement | null {\n const [isValid, setIsValid] = useState(false);\n const [isDefault, setIsDefault] = useState(false);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n const formattedDefaultSettings = useMemo(\n () => JSON.stringify(defaultSettings, null, 2),\n [defaultSettings]\n );\n\n const { data: ruffVersion } = usePromiseFactory(getRuffVersion);\n\n const [model] = useState(() =>\n monaco.editor.createModel(text, 'json', RUFF_SETTINGS_URI)\n );\n\n const handleClose = useCallback((): void => {\n if (isOpen) {\n onClose();\n editorRef.current = undefined;\n model.dispose();\n }\n }, [isOpen, onClose, model]);\n\n const handleSave = useCallback((): void => {\n if (isOpen) {\n try {\n onSave(JSON.parse(editorRef.current?.getModel()?.getValue() ?? ''));\n } catch {\n // no-op\n }\n handleClose();\n }\n }, [isOpen, handleClose, onSave]);\n\n const handleReset = useCallback((): void => {\n assertNotNull(model);\n model.setValue(formattedDefaultSettings);\n }, [model, formattedDefaultSettings]);\n\n const validate = useCallback(\n val => {\n try {\n JSON.parse(val);\n setIsValid(true);\n } catch {\n setIsValid(false);\n }\n setIsDefault(\n editorRef.current?.getModel()?.getValue() === formattedDefaultSettings\n );\n },\n [formattedDefaultSettings]\n );\n\n const debouncedValidate = useDebouncedCallback(validate, 500, {\n leading: true,\n });\n\n const onEditorInitialized = useCallback(\n (editor: monaco.editor.IStandaloneCodeEditor): void => {\n editorRef.current = editor;\n\n model.onDidChangeContent(() => {\n debouncedValidate(model.getValue());\n });\n\n registerRuffSchema();\n debouncedValidate(model.getValue());\n },\n [debouncedValidate, model]\n );\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n centered\n keyboard\n clickOutside={false}\n toggle={handleClose}\n size=\"lg\"\n className=\"ruff-settings-modal\"\n >\n <ModalHeader closeButton={false}>\n <span className=\"settings-modal-title mr-auto\">\n Ruff {ruffVersion} Settings\n </span>\n\n <Link href=\"https://docs.astral.sh/ruff/settings/\" target=\"_blank\">\n <Button kind=\"ghost\" onClick={EMPTY_FUNCTION} icon={vsLinkExternal}>\n Settings Docs\n </Button>\n </Link>\n\n <ActionButton isDisabled={isDefault} onPress={handleReset}>\n <Icon>\n <FontAwesomeIcon icon={vsDiscard} />\n </Icon>\n <Text>Reset to default</Text>\n </ActionButton>\n </ModalHeader>\n <ModalBody style={{ height: '80vh' }}>\n <Editor\n onEditorInitialized={onEditorInitialized}\n settings={{\n readOnly,\n value: text,\n language: 'json',\n folding: true,\n padding: { bottom: 16 },\n lineNumbers: 'on',\n overviewRulerLanes: 0,\n model,\n }}\n />\n </ModalBody>\n <ModalFooter>\n {readOnly ? (\n <Button kind=\"secondary\" data-dismiss=\"modal\" onClick={handleClose}>\n Close\n </Button>\n ) : (\n <>\n <Button kind=\"secondary\" data-dismiss=\"modal\" onClick={handleClose}>\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n data-dismiss=\"modal\"\n tooltip={!isValid ? 'Cannot save invalid JSON' : undefined}\n disabled={!isValid}\n onClick={handleSave}\n >\n Save\n </Button>\n </>\n )}\n </ModalFooter>\n </Modal>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/console",
3
- "version": "0.97.1-beta.3+1fe81723",
3
+ "version": "0.97.1-dhe-ruff.8+82f81375",
4
4
  "description": "Deephaven Console",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -24,16 +24,16 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@astral-sh/ruff-wasm-web": "0.6.4",
27
- "@deephaven/chart": "^0.97.1-beta.3+1fe81723",
28
- "@deephaven/components": "^0.97.1-beta.3+1fe81723",
29
- "@deephaven/icons": "^0.97.1-beta.3+1fe81723",
30
- "@deephaven/jsapi-bootstrap": "^0.97.1-beta.3+1fe81723",
27
+ "@deephaven/chart": "^0.97.1-dhe-ruff.8+82f81375",
28
+ "@deephaven/components": "^0.97.1-dhe-ruff.8+82f81375",
29
+ "@deephaven/icons": "^0.97.1-dhe-ruff.8+82f81375",
30
+ "@deephaven/jsapi-bootstrap": "^0.97.1-dhe-ruff.8+82f81375",
31
31
  "@deephaven/jsapi-types": "^1.0.0-dev0.34.0",
32
- "@deephaven/jsapi-utils": "^0.97.1-beta.3+1fe81723",
33
- "@deephaven/log": "^0.97.1-beta.3+1fe81723",
34
- "@deephaven/react-hooks": "^0.97.1-beta.3+1fe81723",
35
- "@deephaven/storage": "^0.97.1-beta.3+1fe81723",
36
- "@deephaven/utils": "^0.97.1-beta.3+1fe81723",
32
+ "@deephaven/jsapi-utils": "^0.97.1-dhe-ruff.8+82f81375",
33
+ "@deephaven/log": "^0.97.1-dhe-ruff.8+82f81375",
34
+ "@deephaven/react-hooks": "^0.97.1-dhe-ruff.8+82f81375",
35
+ "@deephaven/storage": "^0.97.1-dhe-ruff.8+82f81375",
36
+ "@deephaven/utils": "^0.97.1-dhe-ruff.8+82f81375",
37
37
  "@fortawesome/react-fontawesome": "^0.2.0",
38
38
  "classnames": "^2.3.1",
39
39
  "linkifyjs": "^4.1.0",
@@ -53,9 +53,9 @@
53
53
  "react-dom": ">=16.8.0"
54
54
  },
55
55
  "devDependencies": {
56
- "@deephaven/jsapi-shim": "^0.97.1-beta.3+1fe81723",
57
- "@deephaven/mocks": "^0.97.1-beta.3+1fe81723",
58
- "@deephaven/test-utils": "^0.97.1-beta.3+1fe81723"
56
+ "@deephaven/jsapi-shim": "^0.97.1-dhe-ruff.8+82f81375",
57
+ "@deephaven/mocks": "^0.97.1-dhe-ruff.8+82f81375",
58
+ "@deephaven/test-utils": "^0.97.1-dhe-ruff.8+82f81375"
59
59
  },
60
60
  "files": [
61
61
  "dist"
@@ -66,5 +66,5 @@
66
66
  "publishConfig": {
67
67
  "access": "public"
68
68
  },
69
- "gitHead": "1fe817230e8f7719c8a762519a33313f14a3872e"
69
+ "gitHead": "82f81375d06f786fb9843f6e2db7f98ab2da85b2"
70
70
  }