提交 5f569de4 编写于 作者: R rebornix

more removal of non-null

上级 0921f711
......@@ -103,7 +103,7 @@ const enum CellOverflowToolbarGroups {
export interface INotebookActionContext {
readonly cellTemplate?: BaseCellRenderTemplate;
readonly cell?: ICellViewModel;
readonly notebookEditor: INotebookEditor & IActiveNotebookEditor;
readonly notebookEditor: IActiveNotebookEditor;
readonly ui?: boolean;
}
......
......@@ -207,7 +207,7 @@ export interface INotebookEditorCreationOptions {
readonly contributions?: INotebookEditorContributionDescription[];
}
export interface IActiveNotebookEditor {
export interface IActiveNotebookEditor extends INotebookEditor {
viewModel: NotebookViewModel;
uri: URI;
}
......
......@@ -662,7 +662,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
this._currentKernelTokenSource = new CancellationTokenSource();
this._localStore.add(this._currentKernelTokenSource);
// we don't await for it, otherwise it will slow down the file opening
this._setKernels(textModel, this._currentKernelTokenSource);
this._setKernels(this._currentKernelTokenSource);
this._localStore.add(this.notebookService.onDidChangeKernels(async (e) => {
if (e && e.toString() !== this.textModel?.uri.toString()) {
......@@ -671,7 +671,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
}
this._currentKernelTokenSource?.cancel();
this._currentKernelTokenSource = new CancellationTokenSource();
await this._setKernels(textModel, this._currentKernelTokenSource);
await this._setKernels(this._currentKernelTokenSource);
}));
this._localStore.add(this._list.onDidChangeFocus(() => {
......@@ -746,8 +746,12 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
return result;
}
private async _setKernels(textModel: NotebookTextModel, tokenSource: CancellationTokenSource) {
const provider = this.notebookService.getContributedNotebookProvider(textModel.viewType) || this.notebookService.getContributedNotebookProviders(this.viewModel!.uri)[0];
private async _setKernels(tokenSource: CancellationTokenSource) {
if (!this.viewModel) {
return;
}
const provider = this.notebookService.getContributedNotebookProvider(this.viewModel.viewType) || this.notebookService.getContributedNotebookProviders(this.viewModel.uri)[0];
const availableKernels = await this.beginComputeContributedKernels();
if (tokenSource.token.isCancellationRequested) {
......@@ -874,9 +878,13 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
}
private _updateForMetadata(): void {
const notebookMetadata = this.viewModel!.metadata;
if (!this.viewModel) {
return;
}
const notebookMetadata = this.viewModel.metadata;
this._editorEditable?.set(!!notebookMetadata?.editable);
this._editorRunnable?.set(this.viewModel!.runnable);
this._editorRunnable?.set(this.viewModel.runnable);
this._overflowContainer.classList.toggle('notebook-editor-editable', !!notebookMetadata?.editable);
this.getDomNode().classList.toggle('notebook-editor-editable', !!notebookMetadata?.editable);
......@@ -899,8 +907,16 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
}
this._webviewResolvePromise = new Promise(async resolve => {
await this._webview!.createWebview();
this._webview!.webview!.onDidBlur(() => {
if (!this._webview) {
throw new Error('Notebook output webview object is not created successfully.');
}
await this._webview.createWebview();
if (!this._webview.webview) {
throw new Error('Notebook output webview elemented is not created successfully.');
}
this._webview.webview.onDidBlur(() => {
this._outputFocus?.set(false);
this.updateEditorFocus();
......@@ -908,7 +924,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
this._webiewFocused = false;
}
});
this._webview!.webview!.onDidFocus(() => {
this._webview.webview.onDidFocus(() => {
this._outputFocus?.set(true);
this.updateEditorFocus();
this._onDidFocusEmitter.fire();
......@@ -918,7 +934,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
}
});
this._localStore.add(this._webview!.onMessage(({ message, forRenderer }) => {
this._localStore.add(this._webview.onMessage(({ message, forRenderer }) => {
if (this.viewModel) {
this.notebookService.onDidReceiveMessage(this.viewModel.viewType, this.getId(), forRenderer, message);
}
......@@ -926,7 +942,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
this._webviewResolved = true;
resolve(this._webview!);
resolve(this._webview);
});
return this._webviewResolvePromise;
......
......@@ -372,7 +372,7 @@ export class BackLayerWebView extends Disposable {
}());
</script>`;
const htmlContent = this.generateContent(CELL_OUTPUT_PADDING, coreDependencies, baseUrl.toString());
this.initialize(htmlContent);
this._initialize(htmlContent);
resolveFunc!();
} else {
const loaderUri = FileAccess.asBrowserUri('vs/loader.js', require);
......@@ -396,7 +396,7 @@ var requirejs = (function() {
`;
const htmlContent = this.generateContent(CELL_OUTPUT_PADDING, coreDependencies, baseUrl.toString());
this.initialize(htmlContent);
this._initialize(htmlContent);
resolveFunc!();
});
}
......@@ -404,7 +404,7 @@ var requirejs = (function() {
await this._initalized;
}
async initialize(content: string) {
private async _initialize(content: string) {
if (!document.body.contains(this.element)) {
throw new Error('Element is already detached from the DOM tree');
}
......
......@@ -480,6 +480,10 @@ export class MarkdownCellRenderer extends AbstractCellRenderer implements IListR
}
renderElement(element: MarkdownCellViewModel, index: number, templateData: MarkdownCellRenderTemplate, height: number | undefined): void {
if (!this.notebookEditor.hasModel()) {
throw new Error('The notebook editor is not attached with view model yet.');
}
const removedClassNames: string[] = [];
templateData.rootContainer.classList.forEach(className => {
if (/^nb\-.*$/.test(className)) {
......@@ -522,7 +526,7 @@ export class MarkdownCellRenderer extends AbstractCellRenderer implements IListR
}
}));
elementDisposables.add(new CellContextKeyManager(templateData.contextKeyService, this.notebookEditor, this.notebookEditor.viewModel?.notebookDocument!, element));
elementDisposables.add(new CellContextKeyManager(templateData.contextKeyService, this.notebookEditor, this.notebookEditor.viewModel.notebookDocument!, element));
// render toolbar first
this.setupCellToolbarActions(templateData, elementDisposables);
......@@ -802,7 +806,11 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
}
private updateForMetadata(element: CodeCellViewModel, templateData: CodeCellRenderTemplate): void {
const metadata = element.getEvaluatedMetadata(this.notebookEditor.viewModel!.notebookDocument.metadata);
if (!this.notebookEditor.hasModel()) {
return;
}
const metadata = element.getEvaluatedMetadata(this.notebookEditor.viewModel.notebookDocument.metadata);
templateData.container.classList.toggle('runnable', !!metadata.runnable);
this.updateExecutionOrder(metadata, templateData);
templateData.statusBar.cellStatusMessageContainer.textContent = metadata?.statusMessage || '';
......@@ -857,6 +865,10 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
}
renderElement(element: CodeCellViewModel, index: number, templateData: CodeCellRenderTemplate, height: number | undefined): void {
if (!this.notebookEditor.hasModel()) {
throw new Error('The notebook editor is not attached with view model yet.');
}
const removedClassNames: string[] = [];
templateData.rootContainer.classList.forEach(className => {
if (/^nb\-.*$/.test(className)) {
......@@ -903,7 +915,7 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
elementDisposables.add(this.instantiationService.createInstance(CodeCell, this.notebookEditor, element, templateData));
this.renderedEditors.set(element, templateData.editor);
elementDisposables.add(new CellContextKeyManager(templateData.contextKeyService, this.notebookEditor, this.notebookEditor.viewModel?.notebookDocument!, element));
elementDisposables.add(new CellContextKeyManager(templateData.contextKeyService, this.notebookEditor, this.notebookEditor.viewModel.notebookDocument!, element));
this.updateForLayout(element, templateData);
elementDisposables.add(element.onDidChangeLayout(() => {
......@@ -922,7 +934,7 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
this.updateForHover(element, templateData);
}
}));
elementDisposables.add(this.notebookEditor.viewModel!.notebookDocument.onDidChangeContent(e => {
elementDisposables.add(this.notebookEditor.viewModel.notebookDocument.onDidChangeContent(e => {
if (e.rawEvents.find(event => event.kind === NotebookCellsChangeType.ChangeDocumentMetadata)) {
this.updateForMetadata(element, templateData);
}
......
......@@ -12,7 +12,7 @@ import { IModeService } from 'vs/editor/common/services/modeService';
import { IOpenerService } from 'vs/platform/opener/common/opener';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { EDITOR_BOTTOM_PADDING } from 'vs/workbench/contrib/notebook/browser/constants';
import { CellFocusMode, CodeCellRenderTemplate, getEditorTopPadding, INotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { CellFocusMode, CodeCellRenderTemplate, getEditorTopPadding, IActiveNotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { CodeCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel';
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
......@@ -28,7 +28,7 @@ export class CodeCell extends Disposable {
private _untrustedStatusItem: IDisposable | null = null;
constructor(
private notebookEditor: INotebookEditor,
private notebookEditor: IActiveNotebookEditor,
private viewCell: CodeCellViewModel,
private templateData: CodeCellRenderTemplate,
@INotebookService notebookService: INotebookService,
......
......@@ -12,7 +12,7 @@ import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
import { IEditorOptions } from 'vs/editor/common/config/editorOptions';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { EDITOR_BOTTOM_PADDING } from 'vs/workbench/contrib/notebook/browser/constants';
import { CellEditState, CellFocusMode, INotebookEditor, MarkdownCellRenderTemplate, ICellViewModel, getEditorTopPadding } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { CellEditState, CellFocusMode, MarkdownCellRenderTemplate, ICellViewModel, getEditorTopPadding, IActiveNotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { CellFoldingState } from 'vs/workbench/contrib/notebook/browser/contrib/fold/foldingModel';
import { MarkdownCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
......@@ -34,7 +34,7 @@ export class StatefulMarkdownCell extends Disposable {
private _activeCellRunPlaceholder: IDisposable | null = null;
constructor(
private readonly notebookEditor: INotebookEditor,
private readonly notebookEditor: IActiveNotebookEditor,
private readonly viewCell: MarkdownCellViewModel,
private readonly templateData: MarkdownCellRenderTemplate,
private editorOptions: IEditorOptions,
......@@ -136,8 +136,7 @@ export class StatefulMarkdownCell extends Disposable {
const updatePlaceholder = () => {
if (
this.notebookEditor.viewModel
&& this.notebookEditor.getActiveCell() === this.viewCell
this.notebookEditor.getActiveCell() === this.viewCell
&& !!this.notebookEditor.viewModel.metadata.trusted
) {
// active cell and no run status
......@@ -161,7 +160,7 @@ export class StatefulMarkdownCell extends Disposable {
updatePlaceholder();
}));
this._register(this.notebookEditor.viewModel!.notebookDocument.onDidChangeContent(e => {
this._register(this.notebookEditor.viewModel.notebookDocument.onDidChangeContent(e => {
if (e.rawEvents.find(event => event.kind === NotebookCellsChangeType.ChangeDocumentMetadata)) {
updatePlaceholder();
}
......@@ -198,13 +197,13 @@ export class StatefulMarkdownCell extends Disposable {
this.templateData.container.classList.toggle('collapsed', false);
if (this.editor) {
editorHeight = this.editor!.getContentHeight();
editorHeight = this.editor.getContentHeight();
// not first time, we don't need to create editor or bind listeners
this.viewCell.attachTextEditor(this.editor);
this.focusEditorIfNeeded();
this.bindEditorListeners();
this.bindEditorListeners(this.editor);
this.editor.layout({
width: this.viewCell.layoutInfo.editorWidth,
......@@ -260,7 +259,7 @@ export class StatefulMarkdownCell extends Disposable {
this.focusEditorIfNeeded();
}
this.bindEditorListeners();
this.bindEditorListeners(this.editor!);
this.viewCell.editorHeight = editorHeight;
});
......@@ -365,13 +364,13 @@ export class StatefulMarkdownCell extends Disposable {
}
}
private bindEditorListeners() {
this.localDisposables.add(this.editor!.onDidContentSizeChange(e => {
const viewLayout = this.editor!.getLayoutInfo();
private bindEditorListeners(editor: CodeEditorWidget) {
this.localDisposables.add(editor.onDidContentSizeChange(e => {
const viewLayout = editor.getLayoutInfo();
if (e.contentHeightChanged) {
this.viewCell.editorHeight = e.contentHeight;
this.editor!.layout(
editor.layout(
{
width: viewLayout.width,
height: e.contentHeight
......@@ -380,25 +379,25 @@ export class StatefulMarkdownCell extends Disposable {
}
}));
this.localDisposables.add(this.editor!.onDidChangeCursorSelection((e) => {
this.localDisposables.add(editor.onDidChangeCursorSelection((e) => {
if (e.source === 'restoreState') {
// do not reveal the cell into view if this selection change was caused by restoring editors...
return;
}
const primarySelection = this.editor!.getSelection();
const primarySelection = editor.getSelection();
if (primarySelection) {
this.notebookEditor.revealLineInViewAsync(this.viewCell, primarySelection!.positionLineNumber);
}
}));
const updateFocusMode = () => this.viewCell.focusMode = this.editor!.hasWidgetFocus() ? CellFocusMode.Editor : CellFocusMode.Container;
this.localDisposables.add(this.editor!.onDidFocusEditorWidget(() => {
const updateFocusMode = () => this.viewCell.focusMode = editor.hasWidgetFocus() ? CellFocusMode.Editor : CellFocusMode.Container;
this.localDisposables.add(editor.onDidFocusEditorWidget(() => {
updateFocusMode();
}));
this.localDisposables.add(this.editor!.onDidBlurEditorWidget(() => {
this.localDisposables.add(editor.onDidBlurEditorWidget(() => {
// this is for a special case:
// users click the status bar empty space, which we will then focus the editor
// so we don't want to update the focus state too eagerly
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册