blob: d5a6986d113d90a3853ff95966287ce643b801e9 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
Sources.GoToLineQuickOpen = class extends QuickOpen.FilteredListWidget.Provider {
/**
* @override
* @param {?number} itemIndex
* @param {string} promptValue
*/
selectItem(itemIndex, promptValue) {
const uiSourceCode = this._currentUISourceCode();
if (!uiSourceCode)
return;
const position = this._parsePosition(promptValue);
if (!position)
return;
Common.Revealer.reveal(uiSourceCode.uiLocation(position.line - 1, position.column - 1));
}
/**
* @override
* @param {string} query
* @return {string}
*/
notFoundText(query) {
if (!this._currentUISourceCode())
return Common.UIString('No file selected.');
const position = this._parsePosition(query);
if (!position)
return Common.UIString('Type a number to go to that line.');
let text = Common.UIString('Go to line ') + position.line;
if (position.column && position.column > 1)
text += Common.UIString(' and column ') + position.column;
text += '.';
return text;
}
/**
* @param {string} query
* @return {?{line: number, column: number}}
*/
_parsePosition(query) {
const parts = query.match(/([0-9]+)(\:[0-9]*)?/);
if (!parts || !parts[0] || parts[0].length !== query.length)
return null;
const line = parseInt(parts[1], 10);
let column;
if (parts[2])
column = parseInt(parts[2].substring(1), 10);
return {line: Math.max(line | 0, 1), column: Math.max(column | 0, 1)};
}
/**
* @return {?Workspace.UISourceCode}
*/
_currentUISourceCode() {
const sourcesView = UI.context.flavor(Sources.SourcesView);
if (!sourcesView)
return null;
return sourcesView.currentUISourceCode();
}
};