@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 2.9 kB
JavaScript
import*as i18n from"../../core/i18n/i18n.js";import*as QuickOpen from"../../ui/legacy/components/quick_open/quick_open.js";import*as UI from"../../ui/legacy/legacy.js";import{SourcesView}from"./SourcesView.js";const UIStrings={noFileSelected:"No file selected.",noResultsFound:"No results found",typeANumberToGoToThatLine:"Type a number to go to that line.",currentPositionXsTypeAnOffset:"Current position: 0x{PH1}. Type an offset between 0x{PH2} and 0x{PH3} to navigate to.",currentLineSTypeALineNumber:"Current line: {PH1}. Type a line number between 1 and {PH2} to navigate to.",goToOffsetXs:"Go to offset 0x{PH1}.",goToLineSAndColumnS:"Go to line {PH1} and column {PH2}.",goToLineS:"Go to line {PH1}."},str_=i18n.i18n.registerUIStrings("panels/sources/GoToLineQuickOpen.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class GoToLineQuickOpen extends QuickOpen.FilteredListWidget.Provider{#e=[];selectItem(e,n){const t=this.currentSourceFrame();if(!t)return;const i=this.parsePosition(n);i&&t.revealPosition({lineNumber:i.line-1,columnNumber:i.column-1})}itemCount(){return this.#e.length}renderItem(e,n,t,i){UI.UIUtils.createTextChild(t,this.#e[e])}rewriteQuery(e){return""}queryChanged(e){this.#e=[];const n=this.parsePosition(e),t=this.currentSourceFrame();if(n)t&&t.wasmDisassembly?this.#e.push(i18nString(UIStrings.goToOffsetXs,{PH1:(n.column-1).toString(16)})):n.column&&n.column>1?this.#e.push(i18nString(UIStrings.goToLineSAndColumnS,{PH1:n.line,PH2:n.column})):t&&n.line>t.textEditor.state.doc.lines||this.#e.push(i18nString(UIStrings.goToLineS,{PH1:n.line}));else{if(!t)return void this.#e.push(i18nString(UIStrings.typeANumberToGoToThatLine));const e=t.textEditor.state,n=t.wasmDisassembly,i=t.editorLocationToUILocation(e.doc.lineAt(e.selection.main.head).number-1).lineNumber;if(n){const e=n.lineNumberToBytecodeOffset(n.lineNumbers-1),t=e.toString(16).length,o=n.lineNumberToBytecodeOffset(i);return void this.#e.push(i18nString(UIStrings.currentPositionXsTypeAnOffset,{PH1:o.toString(16).padStart(t,"0"),PH2:"0".padStart(t,"0"),PH3:e.toString(16)}))}const o=t.editorLocationToUILocation(e.doc.lines-1).lineNumber+1;this.#e.push(i18nString(UIStrings.currentLineSTypeALineNumber,{PH1:i+1,PH2:o}))}}notFoundText(e){return this.currentSourceFrame()?i18nString(UIStrings.noResultsFound):i18nString(UIStrings.noFileSelected)}parsePosition(e){const n=this.currentSourceFrame();if(n&&n.wasmDisassembly){const n=e.match(/0x([0-9a-fA-F]+)/);if(!n||!n[0]||n[0].length!==e.length)return null;return{line:0,column:parseInt(n[0],16)+1}}const t=e.match(/([0-9]+)(\:[0-9]*)?/);if(!t||!t[0]||t[0].length!==e.length)return null;const i=parseInt(t[1],10);let o=0;return t[2]&&(o=parseInt(t[2].substring(1),10)),{line:Math.max(0|i,1),column:Math.max(0|o,1)}}currentSourceFrame(){const e=UI.Context.Context.instance().flavor(SourcesView);return e?e.currentSourceFrame():null}}