mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 19:42:56 +01:00
Extract DocumentFormattingEditProvider and DocumentRangeFormattingEditProvider
This commit is contained in:
parent
89d05c5889
commit
3cb8acd2e9
5 changed files with 86 additions and 116 deletions
|
|
@ -763,3 +763,73 @@ export class DocumentLinkAdapter<T extends ILanguageWorkerWithDocumentLinks>
|
|||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider
|
||||
|
||||
export interface ILanguageWorkerWithFormat {
|
||||
format(
|
||||
uri: string,
|
||||
range: lsTypes.Range | null,
|
||||
options: lsTypes.FormattingOptions
|
||||
): Promise<lsTypes.TextEdit[]>;
|
||||
}
|
||||
|
||||
export class DocumentFormattingEditProvider<T extends ILanguageWorkerWithFormat>
|
||||
implements languages.DocumentFormattingEditProvider
|
||||
{
|
||||
constructor(private _worker: WorkerAccessor<T>) {}
|
||||
|
||||
public provideDocumentFormattingEdits(
|
||||
model: editor.IReadOnlyModel,
|
||||
options: languages.FormattingOptions,
|
||||
token: CancellationToken
|
||||
): Promise<languages.TextEdit[] | undefined> {
|
||||
const resource = model.uri;
|
||||
|
||||
return this._worker(resource).then((worker) => {
|
||||
return worker
|
||||
.format(resource.toString(), null, fromFormattingOptions(options))
|
||||
.then((edits) => {
|
||||
if (!edits || edits.length === 0) {
|
||||
return;
|
||||
}
|
||||
return edits.map<languages.TextEdit>(toTextEdit);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class DocumentRangeFormattingEditProvider<T extends ILanguageWorkerWithFormat>
|
||||
implements languages.DocumentRangeFormattingEditProvider
|
||||
{
|
||||
constructor(private _worker: WorkerAccessor<T>) {}
|
||||
|
||||
public provideDocumentRangeFormattingEdits(
|
||||
model: editor.IReadOnlyModel,
|
||||
range: Range,
|
||||
options: languages.FormattingOptions,
|
||||
token: CancellationToken
|
||||
): Promise<languages.TextEdit[] | undefined> {
|
||||
const resource = model.uri;
|
||||
|
||||
return this._worker(resource).then((worker) => {
|
||||
return worker
|
||||
.format(resource.toString(), fromRange(range), fromFormattingOptions(options))
|
||||
.then((edits) => {
|
||||
if (!edits || edits.length === 0) {
|
||||
return;
|
||||
}
|
||||
return edits.map<languages.TextEdit>(toTextEdit);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function fromFormattingOptions(options: languages.FormattingOptions): lsTypes.FormattingOptions {
|
||||
return {
|
||||
tabSize: options.tabSize,
|
||||
insertSpaces: options.insertSpaces
|
||||
};
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
|
|
|||
|
|
@ -48,11 +48,11 @@ export function setupMode1(defaults: LanguageServiceDefaults): void {
|
|||
if (languageId === 'html') {
|
||||
languages.registerDocumentFormattingEditProvider(
|
||||
languageId,
|
||||
new languageFeatures.DocumentFormattingEditProvider(worker)
|
||||
new languageFeatures.HTMLDocumentFormattingEditProvider(worker)
|
||||
);
|
||||
languages.registerDocumentRangeFormattingEditProvider(
|
||||
languageId,
|
||||
new languageFeatures.DocumentRangeFormattingEditProvider(worker)
|
||||
new languageFeatures.HTMLDocumentRangeFormattingEditProvider(worker)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -135,7 +135,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
|||
providers.push(
|
||||
languages.registerDocumentFormattingEditProvider(
|
||||
languageId,
|
||||
new languageFeatures.DocumentFormattingEditProvider(worker)
|
||||
new languageFeatures.HTMLDocumentFormattingEditProvider(worker)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
@ -143,7 +143,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
|||
providers.push(
|
||||
languages.registerDocumentRangeFormattingEditProvider(
|
||||
languageId,
|
||||
new languageFeatures.DocumentRangeFormattingEditProvider(worker)
|
||||
new languageFeatures.HTMLDocumentRangeFormattingEditProvider(worker)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,9 @@ import {
|
|||
DocumentHighlightAdapter,
|
||||
RenameAdapter,
|
||||
DocumentSymbolAdapter,
|
||||
DocumentLinkAdapter
|
||||
DocumentLinkAdapter,
|
||||
DocumentFormattingEditProvider,
|
||||
DocumentRangeFormattingEditProvider
|
||||
} from '../common/lspLanguageFeatures';
|
||||
|
||||
export interface WorkerAccessor {
|
||||
|
|
@ -46,61 +48,9 @@ export class HTMLDocumentSymbolAdapter extends DocumentSymbolAdapter<HTMLWorker>
|
|||
|
||||
export class HTMLDocumentLinkAdapter extends DocumentLinkAdapter<HTMLWorker> {}
|
||||
|
||||
function fromFormattingOptions(options: languages.FormattingOptions): lsTypes.FormattingOptions {
|
||||
return {
|
||||
tabSize: options.tabSize,
|
||||
insertSpaces: options.insertSpaces
|
||||
};
|
||||
}
|
||||
export class HTMLDocumentFormattingEditProvider extends DocumentFormattingEditProvider<HTMLWorker> {}
|
||||
|
||||
export class DocumentFormattingEditProvider implements languages.DocumentFormattingEditProvider {
|
||||
constructor(private _worker: WorkerAccessor) {}
|
||||
|
||||
public provideDocumentFormattingEdits(
|
||||
model: editor.IReadOnlyModel,
|
||||
options: languages.FormattingOptions,
|
||||
token: CancellationToken
|
||||
): Promise<languages.TextEdit[] | undefined> {
|
||||
const resource = model.uri;
|
||||
|
||||
return this._worker(resource).then((worker) => {
|
||||
return worker
|
||||
.format(resource.toString(), null, fromFormattingOptions(options))
|
||||
.then((edits) => {
|
||||
if (!edits || edits.length === 0) {
|
||||
return;
|
||||
}
|
||||
return edits.map<languages.TextEdit>(toTextEdit);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class DocumentRangeFormattingEditProvider
|
||||
implements languages.DocumentRangeFormattingEditProvider
|
||||
{
|
||||
constructor(private _worker: WorkerAccessor) {}
|
||||
|
||||
public provideDocumentRangeFormattingEdits(
|
||||
model: editor.IReadOnlyModel,
|
||||
range: Range,
|
||||
options: languages.FormattingOptions,
|
||||
token: CancellationToken
|
||||
): Promise<languages.TextEdit[] | undefined> {
|
||||
const resource = model.uri;
|
||||
|
||||
return this._worker(resource).then((worker) => {
|
||||
return worker
|
||||
.format(resource.toString(), fromRange(range), fromFormattingOptions(options))
|
||||
.then((edits) => {
|
||||
if (!edits || edits.length === 0) {
|
||||
return;
|
||||
}
|
||||
return edits.map<languages.TextEdit>(toTextEdit);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
export class HTMLDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider<HTMLWorker> {}
|
||||
|
||||
export class FoldingRangeAdapter implements languages.FoldingRangeProvider {
|
||||
constructor(private _worker: WorkerAccessor) {}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
|||
providers.push(
|
||||
languages.registerDocumentFormattingEditProvider(
|
||||
languageId,
|
||||
new languageFeatures.DocumentFormattingEditProvider(worker)
|
||||
new languageFeatures.JSONDocumentFormattingEditProvider(worker)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
@ -38,7 +38,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
|||
providers.push(
|
||||
languages.registerDocumentRangeFormattingEditProvider(
|
||||
languageId,
|
||||
new languageFeatures.DocumentRangeFormattingEditProvider(worker)
|
||||
new languageFeatures.JSONDocumentRangeFormattingEditProvider(worker)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,9 @@ import {
|
|||
fromRange,
|
||||
CompletionAdapter,
|
||||
HoverAdapter,
|
||||
DocumentSymbolAdapter
|
||||
DocumentSymbolAdapter,
|
||||
DocumentFormattingEditProvider,
|
||||
DocumentRangeFormattingEditProvider
|
||||
} from '../common/lspLanguageFeatures';
|
||||
|
||||
export interface WorkerAccessor {
|
||||
|
|
@ -62,61 +64,9 @@ export class JSONHoverAdapter extends HoverAdapter<JSONWorker> {}
|
|||
|
||||
export class JSONDocumentSymbolAdapter extends DocumentSymbolAdapter<JSONWorker> {}
|
||||
|
||||
function fromFormattingOptions(options: languages.FormattingOptions): lsTypes.FormattingOptions {
|
||||
return {
|
||||
tabSize: options.tabSize,
|
||||
insertSpaces: options.insertSpaces
|
||||
};
|
||||
}
|
||||
export class JSONDocumentFormattingEditProvider extends DocumentFormattingEditProvider<JSONWorker> {}
|
||||
|
||||
export class DocumentFormattingEditProvider implements languages.DocumentFormattingEditProvider {
|
||||
constructor(private _worker: WorkerAccessor) {}
|
||||
|
||||
public provideDocumentFormattingEdits(
|
||||
model: editor.IReadOnlyModel,
|
||||
options: languages.FormattingOptions,
|
||||
token: CancellationToken
|
||||
): Promise<languages.TextEdit[] | undefined> {
|
||||
const resource = model.uri;
|
||||
|
||||
return this._worker(resource).then((worker) => {
|
||||
return worker
|
||||
.format(resource.toString(), null, fromFormattingOptions(options))
|
||||
.then((edits) => {
|
||||
if (!edits || edits.length === 0) {
|
||||
return;
|
||||
}
|
||||
return edits.map<languages.TextEdit>(toTextEdit);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class DocumentRangeFormattingEditProvider
|
||||
implements languages.DocumentRangeFormattingEditProvider
|
||||
{
|
||||
constructor(private _worker: WorkerAccessor) {}
|
||||
|
||||
public provideDocumentRangeFormattingEdits(
|
||||
model: editor.IReadOnlyModel,
|
||||
range: Range,
|
||||
options: languages.FormattingOptions,
|
||||
token: CancellationToken
|
||||
): Promise<languages.TextEdit[] | undefined> {
|
||||
const resource = model.uri;
|
||||
|
||||
return this._worker(resource).then((worker) => {
|
||||
return worker
|
||||
.format(resource.toString(), fromRange(range), fromFormattingOptions(options))
|
||||
.then((edits) => {
|
||||
if (!edits || edits.length === 0) {
|
||||
return;
|
||||
}
|
||||
return edits.map<languages.TextEdit>(toTextEdit);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
export class JSONDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider<JSONWorker> {}
|
||||
|
||||
export class DocumentColorAdapter implements languages.DocumentColorProvider {
|
||||
constructor(private _worker: WorkerAccessor) {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue