Add a CodeLens API sample

This commit is contained in:
fxcrespo
2018-10-16 19:31:54 -03:00
parent 3a788a951f
commit 71feaa3785
6 changed files with 2544 additions and 0 deletions

18
codelens-sample/README.md Normal file
View File

@ -0,0 +1,18 @@
# CodeLens Sample
This is a sample extension that shows the usage of the CodeLens API.
It is not intended as a production quality extension.
- Create a new file
- Write anything
- Click on the CodeLens for action example
- Can be enabled or disabled by command palete
# How it works, what it shows?
- The extension uses the [`CodeLens`](https://code.visualstudio.com/docs/extensionAPI/vscode-api#CodeLens)
# How to run locally
* open this folder in VS Code and press `F5`

2363
codelens-sample/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,51 @@
{
"name": "codelens-sample",
"displayName": "CodeLens Sample",
"description": "Samples for VS Code's CodeLens API",
"version": "0.0.1",
"publisher": "ms-vscode",
"engines": {
"vscode": "^1.26.0"
},
"categories": [
"Other"
],
"activationEvents": [
"*"
],
"main": "./out/extension",
"contributes": {
"commands": [
{
"title": "Enable CodeLens",
"command": "codelens-sample.enableCodeLens",
"category": "CodeLens Sample"
},
{
"title": "Disable Codelens",
"command": "codelens-sample.disableCodeLens",
"category": "CodeLens Sample"
}
],
"configuration": {
"properties": {
"codelens-sample.enableCodeLens": {
"type": "boolean",
"default": true
}
}
}
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -p ./",
"watch": "tsc -watch -p ./",
"postinstall": "node ./node_modules/vscode/bin/install"
},
"devDependencies": {
"@types/node": "10.3.6",
"tslint": "5.10.0",
"typescript": "2.9.2",
"vscode": "^1.1.21"
}
}

View File

@ -0,0 +1,54 @@
import * as vscode from 'vscode';
/**
* CodelensProvider
*/
export class CodelensProvider implements vscode.CodeLensProvider {
private codeLenses: vscode.CodeLens[] = [];
private regex: RegExp;
private _onDidChangeCodeLenses: vscode.EventEmitter<void> = new vscode.EventEmitter<void>();
public readonly onDidChangeCodeLenses: vscode.Event<void> = this._onDidChangeCodeLenses.event;
constructor() {
this.regex = /(.+)/g;
vscode.workspace.onDidChangeConfiguration((_) => {
this._onDidChangeCodeLenses.fire();
});
}
public provideCodeLenses(document: vscode.TextDocument, token: vscode.CancellationToken): vscode.CodeLens[] | Thenable<vscode.CodeLens[]> {
if (vscode.workspace.getConfiguration("codelens-sample").get("enableCodeLens", true)) {
this.codeLenses = [];
const regex = new RegExp(this.regex);
const text = document.getText();
let matches;
while ((matches = regex.exec(text)) !== null) {
let line = document.lineAt(document.positionAt(matches.index).line);
let indexOf = line.text.indexOf(matches[0]);
let position = new vscode.Position(line.lineNumber, indexOf);
let range = document.getWordRangeAtPosition(position, new RegExp(this.regex));
if (range) {
this.codeLenses.push(new vscode.CodeLens(range));
}
}
return this.codeLenses;
}
return [];
}
public resolveCodeLens(codeLens: vscode.CodeLens, token: vscode.CancellationToken) {
if (vscode.workspace.getConfiguration("codelens-sample").get("enableCodeLens", true)) {
codeLens.command = {
title: "Codelens provided by sample extension",
tooltip: "Tooltip provided by sample extension",
command: "codelens-sample.codelensAction",
arguments: ["Argument 1", false]
};
return codeLens;
}
return null;
}
}

View File

@ -0,0 +1,36 @@
'use strict';
// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
import { ExtensionContext, languages, commands, Disposable, workspace, window, ConfigurationTarget } from 'vscode';
import { CodelensProvider } from './CodelensProvider';
// this method is called when your extension is activated
// your extension is activated the very first time the command is executed
var disposables: Disposable[] = [];
export function activate(context: ExtensionContext) {
let codelensProvider = new CodelensProvider();
languages.registerCodeLensProvider("*", codelensProvider);
commands.registerCommand("codelens-sample.enableCodeLens", () => {
workspace.getConfiguration("codelens-sample").update("enableCodeLens", true, true);
});
commands.registerCommand("codelens-sample.disableCodeLens", () => {
workspace.getConfiguration("codelens-sample").update("enableCodeLens", false, true);
});
commands.registerCommand("codelens-sample.codelensAction", (args) => {
window.showInformationMessage(`CodeLens action clicked with args=${args}`);
});
}
// this method is called when your extension is deactivated
export function deactivate() {
if (disposables) {
disposables.forEach(item => item.dispose());
}
disposables = [];
}

View File

@ -0,0 +1,22 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"outDir": "out",
"lib": [
"es6"
],
"sourceMap": true,
"rootDir": "src",
/* Strict Type-Checking Option */
"strict": true, /* enable all strict type-checking options */
/* Additional Checks */
"noUnusedLocals": true /* Report errors on unused locals. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
},
"exclude": [
"node_modules"
]
}