5

I am using typescript to write a vs code extension and for some reason I am unable to get the current line.

The function I am trying to make is:

function makeFrame()
{
    vscode.window.activeTextEditor.selection.active.line;
}

Which fails with error: Object is possibly undefined The import statement is:

import {window, commands, Disposable, ExtensionContext, StatusBarAlignment, StatusBarItem, TextDocument} from 'vscode';

What am I doing wrong?

(I am both new to TypeScript and writing extensions for VS code)

Gama11
  • 28,518
  • 9
  • 66
  • 91
Makogan
  • 6,665
  • 6
  • 40
  • 87

2 Answers2

10

activeTextEditor may be undefined. This indicates that there is no active editor and will happen for example when you first open a new workspace or when you close all editors

To fix, just add a quick check:

function makeFrame()
{
    const activeEditor = vscode.window.activeTextEditor;
    if (activeEditor) {
        activeEditor.selection.active.line;
    }
}
Matt Bierner
  • 48,612
  • 13
  • 148
  • 182
3

Object is possibly undefined

Because there may or may not be an activeEditor.

You can do an explicit check:

function makeFrame() {
    const activeEditor = vscode.window.activeTextEditor;
    if (activeEditor != null) {
        activeEditor.selection.active.line;
    }
}

Or an assertion if you are sure:

function makeFrame()
{
    vscode.window.activeTextEditor!.selection.active.line;
}
basarat
  • 234,454
  • 52
  • 420
  • 492