monaco-editor: web ide app worksapce/symbol
Reuse document/symbol s…
#47544
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
monaco-editor don't support
workspace/symbol
Now, we are developing an web ide base on monaco-editor,
and we want to realize the
workspace/symbol
feature which can make multi files switch(cmd + p), just like:However, monaco-editor only support
document/symbol
(cmd + shift + O).We want to reuse the
document/symbol
ui Widget to realizeworkspace/symbol
feature, but we meet an problew:SymbolEntry
was not export inquickOutline.ts
, that I cannot change the action after select an item.if we export SymbolEntry, I can overwrite theSymbolEntry.prototype.run
method in my code, like:```jsimport { QuickOutlineAction, SymbolEntry } from 'monaco-editor/esm/vs/editor/standalone/browser/quickOpen/quickOutline';editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_P, () => {SymbolEntry.prototype.customType = 'workspace';SymbolEntry.prototype.webideRun = SymbolEntry.prototype.run;SymbolEntry.prototype.run = function(...args) {if (this.customType !== 'workspace') {return this.webideRun(...args);}this.customType = '';// do something for workspace/symbol}(new QuickOutlineAction()).run('', eiditor);})