This commit is contained in:
vector-of-bool 2016-04-16 15:32:47 -06:00 коммит произвёл vector-of-bool
Родитель f03db3c8e6
Коммит c974e8fd40
11 изменённых файлов: 639 добавлений и 0 удалений

2
.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1,2 @@
out
node_modules

28
.vscode/launch.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,28 @@
// A launch configuration that compiles the extension and then opens it inside a new window
{
"version": "0.1.0",
"configurations": [
{
"name": "Launch Extension",
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": ["--extensionDevelopmentPath=${workspaceRoot}" ],
"stopOnEntry": false,
"sourceMaps": true,
"outDir": "${workspaceRoot}/out/src",
"preLaunchTask": "npm"
},
{
"name": "Launch Tests",
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test" ],
"stopOnEntry": false,
"sourceMaps": true,
"outDir": "${workspaceRoot}/out/test",
"preLaunchTask": "npm"
}
]
}

11
.vscode/settings.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,11 @@
// Place your settings in this file to overwrite default and user settings.
{
"files.exclude": {
"out": false // set this to true to hide the "out" folder with the compiled JS files
},
"search.exclude": {
"out": true // set this to false to include "out" folder in search results
},
"typescript.tsdk": "./node_modules/typescript/lib", // we want to use the TS server from our node_modules folder to control its version
"files.trimTrailingWhitespace": true
}

30
.vscode/tasks.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,30 @@
// Available variables which can be used inside of strings.
// ${workspaceRoot}: the root folder of the team
// ${file}: the current opened file
// ${fileBasename}: the current opened file's basename
// ${fileDirname}: the current opened file's dirname
// ${fileExtname}: the current opened file's extension
// ${cwd}: the current working directory of the spawned process
// A task runner that calls a custom npm script that compiles the extension.
{
"version": "0.1.0",
// we want to run npm
"command": "npm",
// the command is a shell script
"isShellCommand": true,
// show the output window only if unrecognized errors occur.
"showOutput": "silent",
// we run the custom script "compile" as defined in package.json
"args": ["run", "compile", "--loglevel", "silent"],
// The tsc compiler is started in watching mode
"isWatching": true,
// use the standard tsc in watch mode problem matcher to find compile problems in the output.
"problemMatcher": "$tsc-watch"
}

9
.vscodeignore Normal file
Просмотреть файл

@ -0,0 +1,9 @@
.vscode/**
typings/**
out/test/**
test/**
src/**
**/*.map
.gitignore
tsconfig.json
vsc-extension-quickstart.md

10
README.md Normal file
Просмотреть файл

@ -0,0 +1,10 @@
# VSCode CMake Tools
This is a simple Visual Studio Code extension that offers CMake integration. This extension
itself *does not* provide language support. For that I recommend
[this extension](https://marketplace.visualstudio.com/items?itemName=twxs.cmake).
This extension can be installed with ``ext install cmake-tools``.
Issues? Questions? Feature requests? Create an issue on
[the github page](https://github.com/vector-of-bool/vscode-cmake-tools).

264
res/icon.svg Normal file
Просмотреть файл

@ -0,0 +1,264 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
width="128"
height="128"
sodipodi:docname="icon.svg"
inkscape:export-filename="/home/colby/Documents/Programming/hello-vscode/res/icon.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<filter
id="filter3770"
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow">
<feFlood
id="feFlood3772"
flood-opacity="0.5"
flood-color="rgb(0,0,0)"
result="flood" />
<feComposite
id="feComposite3774"
in2="SourceGraphic"
in="flood"
operator="in"
result="composite1" />
<feGaussianBlur
id="feGaussianBlur3776"
in="composite"
stdDeviation="2"
result="blur" />
<feOffset
id="feOffset3778"
dx="4"
dy="4"
result="offset" />
<feComposite
id="feComposite3780"
in2="offset"
in="SourceGraphic"
operator="over"
result="composite2" />
</filter>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1376"
inkscape:window-height="813"
id="namedview4"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-bbox="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:zoom="3.421875"
inkscape:cx="16.384948"
inkscape:cy="72.571875"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<image
width="98.169495"
height="98.169495"
xlink:href="data:image/png;base64,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
"
id="image10"
x="21.966103"
y="8.4067802" />
<path
style="fill:#00a3db;fill-opacity:1;stroke:#007fab;stroke-width:2.13000011;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter3770)"
d="m 15.392896,12.903754 c -4.433665,2.32223 -7.4687495,6.960486 -7.4687495,12.3125 0,5.509605 3.2245275,10.249367 7.8749995,12.5 -0.0025,0.0723 0,0.145809 0,0.21875 l 0,34.3125 c 0,3.34278 2.68847,6.03125 6.03125,6.03125 3.34278,0 6.03125,-2.68847 6.03125,-6.03125 l 0,-34.3125 c 0,-0.07294 0.0025,-0.146451 0,-0.21875 4.641385,-2.250633 7.84375,-6.990395 7.84375,-12.5 0,-5.337192 -2.992655,-9.952631 -7.40625,-12.28125 l 0,14.09375 -6.46875,3.71875 -6.4375,-3.71875 0,-14.125 z"
id="rect2987"
inkscape:connector-curvature="0"
transform="matrix(1.070959,-0.85221386,0.85221386,1.070959,-18.848013,42.412659)" />
</svg>

После

Ширина:  |  Высота:  |  Размер: 15 KiB

270
src/extension.ts Normal file
Просмотреть файл

@ -0,0 +1,270 @@
'use strict';
import * as vscode from 'vscode';
import * as proc from 'child_process';
import * as fs from 'fs';
import * as path from 'path';
export function activate(context: vscode.ExtensionContext) {
// Create an output channel where the configure and build output will go
const channel = vscode.window.createOutputChannel('CMake/Build');
// The diagnostics collection we talk to
let cmake_diagnostics = vscode.languages.createDiagnosticCollection('cmake-diags');
// Get the configuration
function cmakeConfig(): vscode.WorkspaceConfiguration {
return vscode.workspace.getConfiguration('cmake');
}
// Get the value of a CMake configuration setting
function config<T>(path: string, defaultValue?: T): T {
return cmakeConfig().get<T>(path, defaultValue);
}
// Wrap a Node-style function that takes a callback in a promise, making it awaitable
function doAsync<T>(fn: Function, ...args): Promise<T> {
return new Promise<T>((resolve, reject) => {
fn(...args, resolve);
});
}
// Returns the build directory
function buildDirectory(): string {
const build_dir = config<string>('buildDirectory');
return build_dir.replace('${workspaceRoot}', vscode.workspace.rootPath);
}
// Test that a command exists
const testHaveCommand = async function (command, args: string[] = ['--version']): Promise<Boolean> {
return await new Promise<Boolean>((resolve, _) => {
const pipe = proc.spawn(command, args);
pipe.on('error', () => resolve(false));
pipe.on('exit', () => resolve(true));
});
}
// Given a list of CMake generators, returns the first on available
const pickGenerator = async function (candidates: string[]): Promise<string> {
for (const gen of candidates) {
const delegate = {
Ninja: async function () { return await testHaveCommand('ninja'); },
"MinGW Makefiles": async function () {
return process.platform === 'win32' && await testHaveCommand('make');
},
"NMake Makefiles": async function () {
return process.platform === 'win32' && await testHaveCommand('nmake', ['/?']);
},
'Unix Makefiles': async function () {
return process.platform !== 'win32' && await testHaveCommand('make');
}
}[gen];
if (delegate === undefined) {
vscode.window.showErrorMessage('Unknown CMake generator "' + gen + '"');
continue;
}
if (await delegate())
return gen;
else
console.log('Genereator "' + gen + '" is not supported');
}
return null;
}
function executeCMake(args: string[]): void {
console.info('Execute cmake with arguments:', args);
const pipe = proc.spawn('cmake', args);
const status = vscode.window.setStatusBarMessage;
status('Executing CMake...', 1000);
channel.appendLine('[vscode] Executing cmake command: cmake ' + args.join(' '));
let stderr_acc = '';
pipe.stdout.on('data', (data: Uint8Array) => {
const str = data.toString();
console.log('cmake [stdout]: ' + str.trim());
channel.append(str);
status('cmake: ' + str.trim(), 1000);
});
pipe.stderr.on('data', (data: Uint8Array) => {
const str = data.toString();
console.log('cmake [stderr]: ' + str.trim());
stderr_acc += str;
channel.append(str);
status('cmake: ' + str.trim(), 1000);
});
pipe.on('close', (retc: Number) => {
console.log('cmake exited with return code ' + retc);
channel.appendLine('[vscode] CMake exited with status ' + retc);
status('CMake exited with status ' + retc, 3000);
if (retc !== 0) {
vscode.window.showErrorMessage('CMake exited with non-zero return code ' + retc + '. See CMake/Build output for details');
}
let rest = stderr_acc;
const diag_re = /CMake (.*?) at (.*?):(\d+) .*?:\s+(.*?)\s*\n\n\n((.|\n)*)/;
const diags: Object = {};
while (true) {
if (!rest.length) break;
const found = diag_re.exec(rest);
if (!found) break;
const [level, filename, linestr, what, tail] = found.slice(1);
const filepath =
path.isAbsolute(filename)
? filename
: path.join(vscode.workspace.rootPath, filename);
const line = Number.parseInt(linestr) - 1;
if (!(filepath in diags)) {
diags[filepath] = [];
}
const file_diags: vscode.Diagnostic[] = diags[filepath];
const diag = new vscode.Diagnostic(
new vscode.Range(
line,
0,
line,
Number.POSITIVE_INFINITY
),
what,
{
"Warning": vscode.DiagnosticSeverity.Warning,
"Error": vscode.DiagnosticSeverity.Error,
}[level]
);
diag.source = 'CMake';
file_diags.push(diag);
rest = tail;
}
cmake_diagnostics.clear();
for (const filepath in diags) {
cmake_diagnostics.set(vscode.Uri.file(filepath), diags[filepath]);
}
});
}
const configure = vscode.commands.registerCommand('cmake.configure', async function (extra_args: string[] = []) {
if (!(extra_args instanceof Array)) {
extra_args = [];
}
const source_dir = vscode.workspace.rootPath;
if (!source_dir) {
vscode.window.showErrorMessage('You do not have a source directory open');
return;
}
const cmake_list = path.join(source_dir, 'CMakeLists.txt');
const binary_dir = buildDirectory();
const cmake_cache = path.join(binary_dir, "CMakeCache.txt");
channel.show();
const settings_args = ['--no-warn-unused-cli'];
if (!(await doAsync(fs.exists, cmake_cache))) {
channel.appendLine("[vscode] Setting up initial CMake configuration");
const generator = await pickGenerator(config<string[]>("preferredGenerators"));
if (generator) {
channel.appendLine('[vscode] Configuring using the "' + generator + '" CMake generator');
settings_args.push("-G" + generator);
}
else {
console.error("None of the preferred generators was selected");
}
settings_args.push("-DCMAKE_BUILD_TYPE=" + config<string>("initialBuildType"));
}
const settings = config<Object>("configureSettings");
for (const key in settings) {
let value = settings[key];
if (value === true || value === false)
value = value ? "TRUE" : "FALSE";
if (value instanceof Array)
value = value.join(';');
settings_args.push("-D" + key + "=" + value);
}
await executeCMake(
['-H' + source_dir, '-B' + binary_dir]
.concat(settings_args)
.concat(extra_args)
);
});
const build = vscode.commands.registerCommand('cmake.build', async function (target = 'all') {
if (target instanceof Object) {
target = 'all';
}
const source_dir = vscode.workspace.rootPath;
if (!source_dir) {
vscode.window.showErrorMessage('You do not have a source directory open');
return;
}
const binary_dir = buildDirectory();
if (!(await doAsync(fs.exists, binary_dir))) {
vscode.window.showErrorMessage('You do not yet have a build directory. Configure your project first');
return;
}
channel.show();
await executeCMake(['--build', binary_dir, '--target', target]);
});
const build_target = vscode.commands.registerCommand('cmake.buildWithTarget', async function () {
const target: string = await vscode.window.showInputBox({
prompt: 'Enter the name of a target to build',
});
vscode.commands.executeCommand('cmake.build', target);
});
const set_build_type = vscode.commands.registerCommand('cmake.setBuildType', async function () {
const build_type = await vscode.window.showQuickPick<any>([{
label: 'Release',
description: 'Optimized build with no debugging information',
}, {
label: 'Debug',
description: 'Default build type. No optimizations. Contains debug information',
}, {
label: 'MinSizeRel',
description: 'Release build tweaked for minimum binary code size',
}, {
label: 'RelWithDebInfo',
description: 'Same as "Release", but also generates debugging information',
}]);
vscode.commands.executeCommand('cmake.configure', ['-DCMAKE_BUILD_TYPE=' + build_type.label])
})
const clean_configure = vscode.commands.registerCommand('cmake.cleanConfigure', async function () {
const build_dir = buildDirectory();
const cmake_cache = path.join(build_dir, 'CMakeCache.txt');
const cmake_files = path.join(build_dir, 'CMakeFiles');
if (await doAsync(fs.exists, cmake_cache)) {
channel.appendLine('[vscode] Removing ' + cmake_cache);
await doAsync(fs.unlink, cmake_cache);
}
if (await doAsync(fs.exists, cmake_files)) {
channel.appendLine('[vscode] Removing ' + cmake_files);
await doAsync(fs.unlink, cmake_files);
}
await vscode.commands.executeCommand('cmake.configure');
});
const clean = vscode.commands.registerCommand("cmake.clean", async function () {
await vscode.commands.executeCommand('cmake.build', 'clean');
});
const clean_rebuild = vscode.commands.registerCommand('cmake.cleanRebuild', async function () {
await vscode.commands.executeCommand('cmake.clean');
await vscode.commands.executeCommand('cmake.build');
});
const ctest = vscode.commands.registerCommand('cmake.ctest', async function () {
executeCMake(['-E', 'chdir', buildDirectory(), 'ctest', '-j8', '--output-on-failure']);
});
for (const item of [configure, build, build_target, set_build_type, clean_configure, clean, clean_rebuild])
context.subscriptions.push(item);
}
// this method is called when your extension is deactivated
export function deactivate() {
}

13
tsconfig.json Normal file
Просмотреть файл

@ -0,0 +1,13 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "ES5",
"outDir": "out",
"noLib": true,
"sourceMap": true,
"rootDir": "."
},
"exclude": [
"node_modules"
]
}

1
typings/node.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1 @@
/// <reference path="../node_modules/vscode/typings/node.d.ts" />

1
typings/vscode-typings.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1 @@
/// <reference path="../node_modules/vscode/typings/index.d.ts" />