VSC Extension Development-Create A Code Formatter Extension
2019-10-27
Nothing to say here, check Official Guide
Here we will talk about:
-
activate
,deactivate
event and the lifecycle of a extension -
use
registerCommand
to regist a normal event -
provideDocumentFormattingEdits
regist a format event and design formatter the details
extension.js
const vscode = require('vscode');
/**
* @param {vscode.ExtensionContext} context
*/
const activate = (context) => {
//
console.log('Congratulations, your extension "nurse-lisa" is now active!');
// The key part is the ommand identifier, which will defined in package.json
// Here we will do:
// 1. Regist an event which will triggered via [ctrl + alt + P]
// 2. Push the event into the event subscription queue
let disposable = vscode.commands.registerCommand('extension.nurselisa.format', function() {
// The code you place here will executed every time your command executed
// Display a message box to the user
vscode.window.showInformationMessage(dj('nurse-lisa test abc !!!……', {
successiveExclamationMarks: false,
replaceWithCornerQuotes: 'double',
halfwidthParenthesisAroundNumbers: true
}));
});
context.subscriptions.push(disposable);
// 3. Regist an event, which will invoked when triggered with 'format' action, if we have many formatter then we need to set the exact command identifier
// 4. Push the event into the event subscription queue
/*
registerDocumentFormattingEditProvider(formatSelector, provideDocumentFormattingEdits)
[formatSelector]: limit the [scheme] and [language]
here we declared the [scheme], the optional values are:
[file] represents the saved files,
[untitled] represents unsaved files
*/
const documentFilters = [{
scheme: 'file'
}, {
scheme: 'untitled'
}]
let disposable2 = vscode.languages.registerDocumentFormattingEditProvider(documentFilters, {
provideDocumentFormattingEdits: (document) => {
const firstLine = document.lineAt(0);
console.log(firstLine)
return [vscode.TextEdit.insert(firstLine.range.start, '123456\n')];
}
});
context.subscriptions.push(disposable2)
}
exports.activate = activate;
// this method called when your extension deactivated
const deactivate = () => {}
module.exports = {
activate,
deactivate
}
package.json
{
"name": "nurse-lisa",
"displayName": "Nurse-lisa",
"description": "",
"version": "0.0.1",
"engines": {
"vscode": "^1.39.0"
},
"categories": [
"Other"
],
"activationEvents": [
"onCommand:extension.nurselisa.format"
],
"main": "./extension.js",
"contributes": {
"commands": [
{
"command": "extension.nurselisa.format", // here is the command identifier
"title": "Nurse Lisa - Format Markdown" // this is the title of your registered command
}
]
},
"scripts": {
"test": "node ./test/runTest.js"
},
"devDependencies": {
"@types/glob": "^7.1.1",
"@types/mocha": "^5.2.6",
"@types/node": "^10.12.21",
"@types/vscode": "^1.39.0",
"eslint": "^5.13.0",
"glob": "^7.1.4",
"mocha": "^6.1.4",
"typescript": "^3.3.1",
"vscode-test": "^1.2.0"
},
"dependencies": {
"doctor-jones": "^1.0.2"
}
}
Here we will use registerDocumentFormattingEditProvider
regist a text editor format event。
let disposable = vscode.commands.registerTextEditorCommand('extension.nurselisa.format', (editor, edit) => {
vscode.window.showInformationMessage('Nurse Lisa: Markdown Formatted');
let textToFormat = editor.document.getText();
let fullRange = new vscode.Range(0, 0, editor.document.lineCount, 0);
let formatted = format(textToFormat);
edit.replace(fullRange, formatted);
});
context.subscriptions.push(disposable);
command 'extension.useMyExtension.commandA' not found
Check if ALL your events are registered here:
{
……
"activationEvents": [
/* DO NOT forget to add prefix 'onCommand:' */
"onCommand:extension.useMyExtension.commandA",
"onCommand:extension.useMyExtension.commandB"
]
……
}
关于本文
文章标题 | VSC Extension Development-Create A Code Formatter Extension |
发布日期 | 2019-10-27 |
文章分类 | Tech |
相关标签 | #VSC #Extension |
最近文章
留言板
PLACE_HOLDER
PLACE_HOLDER
PLACE_HOLDER
PLACE_HOLDER
PLACE_HOLDER
PLACE_HOLDER
PLACE_HOLDER
PLACE_HOLDER