diff --git a/front_end/panels/console/ConsolePrompt.ts b/front_end/panels/console/ConsolePrompt.ts index 8d805220c9..dc5aa7aac9 100644 --- a/front_end/panels/console/ConsolePrompt.ts +++ b/front_end/panels/console/ConsolePrompt.ts @@ -209,6 +209,13 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin this.moveHistory(1)}, {mac: 'Ctrl-p', run: (): boolean => this.moveHistory(-1, true)}, {mac: 'Ctrl-n', run: (): boolean => this.moveHistory(1, true)}, + { + key: 'Escape', + run: (): boolean => { + TextEditor.JavaScript.closeArgumentsHintsTooltip(this.editor.editor); + return true; + }, + }, { key: 'Enter', run: (): boolean => { @@ -259,6 +266,7 @@ export class ConsolePrompt extends Common.ObjectWrapper.eventMixin { if (await this.enterWillEvaluate()) { this.appendCommand(this.text(), true); + TextEditor.JavaScript.closeArgumentsHintsTooltip(this.editor.editor); this.editor.dispatch({ changes: {from: 0, to: this.editor.state.doc.length}, scrollIntoView: true, diff --git a/front_end/ui/components/text_editor/cursor_tooltip.ts b/front_end/ui/components/text_editor/cursor_tooltip.ts index 8b90e2aee7..1274edad74 100644 --- a/front_end/ui/components/text_editor/cursor_tooltip.ts +++ b/front_end/ui/components/text_editor/cursor_tooltip.ts @@ -4,11 +4,12 @@ import * as CodeMirror from '../../../third_party/codemirror.next/codemirror.next.js'; +export const closeTooltip = CodeMirror.StateEffect.define(); + export function cursorTooltip( source: (state: CodeMirror.EditorState, pos: number) => Promise<(() => CodeMirror.TooltipView)|null>, ): CodeMirror.Extension { const openTooltip = CodeMirror.StateEffect.define<() => CodeMirror.TooltipView>(); - const closeTooltip = CodeMirror.StateEffect.define(); const state = CodeMirror.StateField.define({ create() { @@ -41,18 +42,18 @@ export function cursorTooltip( update(update: CodeMirror.ViewUpdate): void { this.updateID++; if (update.transactions.some(tr => tr.selection) && update.state.selection.main.empty) { - this.scheduleUpdate(update.view); + this.#scheduleUpdate(update.view); } } - scheduleUpdate(view: CodeMirror.EditorView): void { + #scheduleUpdate(view: CodeMirror.EditorView): void { if (this.pending > -1) { clearTimeout(this.pending); } - this.pending = window.setTimeout(() => this.startUpdate(view), 50) as unknown as number; + this.pending = window.setTimeout(() => this.#startUpdate(view), 50) as unknown as number; } - startUpdate(view: CodeMirror.EditorView): void { + #startUpdate(view: CodeMirror.EditorView): void { this.pending = -1; const {main} = view.state.selection; if (main.empty) { @@ -60,7 +61,7 @@ export function cursorTooltip( void source(view.state, main.from).then(tooltip => { if (this.updateID !== updateID) { if (this.pending < 0) { - this.scheduleUpdate(view); + this.#scheduleUpdate(view); } } else if (tooltip) { view.dispatch({effects: openTooltip.of(tooltip)}); diff --git a/front_end/ui/components/text_editor/javascript.ts b/front_end/ui/components/text_editor/javascript.ts index 6b6e968ba1..9286ca1c85 100644 --- a/front_end/ui/components/text_editor/javascript.ts +++ b/front_end/ui/components/text_editor/javascript.ts @@ -7,7 +7,8 @@ import * as Formatter from '../../../models/formatter/formatter.js'; import * as JavaScriptMetaData from '../../../models/javascript_metadata/javascript_metadata.js'; import * as CodeMirror from '../../../third_party/codemirror.next/codemirror.next.js'; import * as UI from '../../legacy/legacy.js'; -import {cursorTooltip} from './cursor_tooltip.js'; + +import {closeTooltip, cursorTooltip} from './cursor_tooltip.js'; export function completion(): CodeMirror.Extension { return CodeMirror.javascript.javascriptLanguage.data.of({ @@ -424,6 +425,10 @@ export function argumentHints(): CodeMirror.Extension { return cursorTooltip(getArgumentHints); } +export function closeArgumentsHintsTooltip(view: CodeMirror.EditorView): void { + view.dispatch({effects: closeTooltip.of(null)}); +} + async function getArgumentHints( state: CodeMirror.EditorState, pos: number): Promise<(() => CodeMirror.TooltipView)|null> { const node = CodeMirror.syntaxTree(state).resolveInner(pos).enterUnfinishedNodesBefore(pos);