Observe lineNumber if there is no active selection or if the active selection does not contain the specified line number (#176432)

* Observe `lineNumber` if there is no active selection or if the active selection does not contain the specified line number

* Explicit undefined check

* Extract condition into function
This commit is contained in:
Joyce Er 2023-03-07 14:23:04 -08:00 committed by GitHub
parent 721fbe6f01
commit 9c7113f6ae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -69,16 +69,11 @@ function getFileAndPosition(context: LinkContext): IFilePosition | INotebookPosi
const cell = vscode.window.activeNotebookEditor.notebook.getCells().find(cell => cell.document.uri.fragment === uri?.fragment);
const cellIndex = cell?.index ?? vscode.window.activeNotebookEditor.selection.start;
let range;
if (lineNumber !== undefined) {
range = new vscode.Range(new vscode.Position(lineNumber - 1, 0), new vscode.Position(lineNumber - 1, 1));
} else if (cell !== undefined) {
range = vscode.window.activeTextEditor?.selection;
}
const range = getRangeOrSelection(lineNumber);
return { type: LinkType.Notebook, uri, cellIndex, range };
} else {
// the active editor is a text editor
range = lineNumber !== undefined ? new vscode.Range(lineNumber - 1, 0, lineNumber - 1, 1) : vscode.window.activeTextEditor?.selection;
range = getRangeOrSelection(lineNumber);
return { type: LinkType.File, uri, range };
}
}
@ -91,6 +86,12 @@ function getFileAndPosition(context: LinkContext): IFilePosition | INotebookPosi
return undefined;
}
function getRangeOrSelection(lineNumber: number | undefined) {
return lineNumber !== undefined && (!vscode.window.activeTextEditor || vscode.window.activeTextEditor.selection.isEmpty || !vscode.window.activeTextEditor.selection.contains(new vscode.Position(lineNumber - 1, 0)))
? new vscode.Range(lineNumber - 1, 0, lineNumber - 1, 1)
: vscode.window.activeTextEditor?.selection;
}
function rangeString(range: vscode.Range | undefined) {
if (!range) {
return '';