當前位置: 首頁>>代碼示例>>TypeScript>>正文


TypeScript ITextModel.pushEditOperations方法代碼示例

本文整理匯總了TypeScript中vs/editor/common/model.ITextModel.pushEditOperations方法的典型用法代碼示例。如果您正苦於以下問題:TypeScript ITextModel.pushEditOperations方法的具體用法?TypeScript ITextModel.pushEditOperations怎麽用?TypeScript ITextModel.pushEditOperations使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在vs/editor/common/model.ITextModel的用法示例。


在下文中一共展示了ITextModel.pushEditOperations方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。

示例1: formatDocumentWithProvider

export async function formatDocumentWithProvider(
	accessor: ServicesAccessor,
	provider: DocumentFormattingEditProvider,
	editorOrModel: ITextModel | IActiveCodeEditor,
	token: CancellationToken
): Promise<boolean> {
	const workerService = accessor.get(IEditorWorkerService);

	let model: ITextModel;
	let validate: () => boolean;
	if (isCodeEditor(editorOrModel)) {
		model = editorOrModel.getModel();
		const state = new EditorState(editorOrModel, CodeEditorStateFlag.Value | CodeEditorStateFlag.Position);
		validate = () => state.validate(editorOrModel);
	} else {
		model = editorOrModel;
		const versionNow = editorOrModel.getVersionId();
		validate = () => versionNow === editorOrModel.getVersionId();
	}

	const rawEdits = await provider.provideDocumentFormattingEdits(
		model,
		model.getFormattingOptions(),
		token
	);

	const edits = await workerService.computeMoreMinimalEdits(model.uri, rawEdits);

	if (!validate()) {
		return true;
	}

	if (!edits || edits.length === 0) {
		return false;
	}

	if (isCodeEditor(editorOrModel)) {
		// use editor to apply edits
		FormattingEdit.execute(editorOrModel, edits);
		alertFormattingEdits(edits);
		editorOrModel.pushUndoStop();
		editorOrModel.focus();
		editorOrModel.revealPositionInCenterIfOutsideViewport(editorOrModel.getPosition(), editorCommon.ScrollType.Immediate);

	} else {
		// use model to apply edits
		const [{ range }] = edits;
		const initialSelection = new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);
		model.pushEditOperations([initialSelection], edits.map(edit => {
			return {
				text: edit.text,
				range: Range.lift(edit.range),
				forceMoveMarkers: true
			};
		}), undoEdits => {
			for (const { range } of undoEdits) {
				if (Range.areIntersectingOrTouching(range, initialSelection)) {
					return [new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn)];
				}
			}
			return null;
		});
	}

	return true;
}
開發者ID:joelday,項目名稱:vscode,代碼行數:66,代碼來源:format.ts


注:本文中的vs/editor/common/model.ITextModel.pushEditOperations方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。