Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 37 additions & 21 deletions extension.js
Original file line number Diff line number Diff line change
Expand Up @@ -292,30 +292,46 @@ exports.activate = context => {
);

if (phpcbf.documentFormattingProvider) {
// Shared helper: run phpcbf on the full document and return TextEdits.
const getFullDocumentEdits = (document) => {
return new Promise((resolve, reject) => {
const originalText = document.getText();
let lastLine = document.lineAt(document.lineCount - 1);
let range = new Range(
new Position(0, 0),
lastLine.range.end
);
phpcbf
.format(document)
.then(text => {
if (text != originalText) {
resolve([new vscode.TextEdit(range, text)]);
} else {
reject();
}
})
.catch(err => {
console.log(err);
reject();
});
});
};

context.subscriptions.push(
languages.registerDocumentFormattingEditProvider("php", {
provideDocumentFormattingEdits: (document, options, token) => {
return new Promise((resolve, reject) => {
const originalText = document.getText();
let lastLine = document.lineAt(document.lineCount - 1);
let range = new Range(
new Position(0, 0),
lastLine.range.end
);
phpcbf
.format(document)
.then(text => {
if (text != originalText) {
resolve([new vscode.TextEdit(range, text)]);
} else {
reject();
}
})
.catch(err => {
console.log(err);
reject();
});
});
return getFullDocumentEdits(document);
}
})
);

// Register a range formatting provider so that VS Code's
// editor.formatOnPaste works. phpcbf always operates on the full
// document, so the range is ignored and the full document is fixed.
context.subscriptions.push(
languages.registerDocumentRangeFormattingEditProvider("php", {
provideDocumentRangeFormattingEdits: (document, range, options, token) => {
return getFullDocumentEdits(document);
}
})
);
Expand Down