feat: vscode extension setup
This commit is contained in:
9
.editorconfig
Normal file
9
.editorconfig
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
node_modules/
|
||||||
|
dist/
|
||||||
|
out/
|
||||||
|
.vscode-test/
|
||||||
|
*.vsix
|
||||||
|
*.log
|
||||||
|
.DS_Store
|
||||||
5
.vscode-test.mjs
Normal file
5
.vscode-test.mjs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { defineConfig } from "@vscode/test-cli";
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
files: "out/test/**/*.test.js",
|
||||||
|
});
|
||||||
14
.vscodeignore
Normal file
14
.vscodeignore
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
.vscode/**
|
||||||
|
.vscode-test/**
|
||||||
|
out/**
|
||||||
|
node_modules/**
|
||||||
|
src/**
|
||||||
|
.gitignore
|
||||||
|
.yarnrc
|
||||||
|
esbuild.js
|
||||||
|
vsc-extension-quickstart.md
|
||||||
|
**/tsconfig.json
|
||||||
|
**/eslint.config.mjs
|
||||||
|
**/*.map
|
||||||
|
**/*.ts
|
||||||
|
**/.vscode-test.*
|
||||||
9
CHANGELOG.md
Normal file
9
CHANGELOG.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to the "tatr-vsc" extension will be documented in this file.
|
||||||
|
|
||||||
|
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
- Initial release
|
||||||
55
esbuild.js
Normal file
55
esbuild.js
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
const esbuild = require("esbuild");
|
||||||
|
|
||||||
|
const production = process.argv.includes("--production");
|
||||||
|
const watch = process.argv.includes("--watch");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {import("esbuild").Plugin}
|
||||||
|
*/
|
||||||
|
const esbuildProblemMatcherPlugin = {
|
||||||
|
name: "esbuild-problem-matcher",
|
||||||
|
|
||||||
|
setup(build) {
|
||||||
|
build.onStart(() => {
|
||||||
|
console.log("[watch] build started");
|
||||||
|
});
|
||||||
|
build.onEnd((result) => {
|
||||||
|
result.errors.forEach(({ text, location }) => {
|
||||||
|
console.error(`✘ [ERROR] ${text}`);
|
||||||
|
console.error(` ${location.file}:${location.line}:${location.column}:`);
|
||||||
|
});
|
||||||
|
console.log("[watch] build finished");
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const ctx = await esbuild.context({
|
||||||
|
entryPoints: [
|
||||||
|
"src/extension.ts"
|
||||||
|
],
|
||||||
|
bundle: true,
|
||||||
|
format: "cjs",
|
||||||
|
minify: production,
|
||||||
|
sourcemap: !production,
|
||||||
|
sourcesContent: false,
|
||||||
|
platform: "node",
|
||||||
|
outfile: "dist/extension.js",
|
||||||
|
external: ["vscode"],
|
||||||
|
logLevel: "silent",
|
||||||
|
plugins: [
|
||||||
|
esbuildProblemMatcherPlugin,
|
||||||
|
],
|
||||||
|
});
|
||||||
|
if (watch) {
|
||||||
|
await ctx.watch();
|
||||||
|
} else {
|
||||||
|
await ctx.rebuild();
|
||||||
|
await ctx.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main().catch(e => {
|
||||||
|
console.error(e);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
27
eslint.config.mjs
Normal file
27
eslint.config.mjs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import typescriptEslint from "typescript-eslint";
|
||||||
|
|
||||||
|
export default [{
|
||||||
|
files: ["**/*.ts"],
|
||||||
|
}, {
|
||||||
|
plugins: {
|
||||||
|
"@typescript-eslint": typescriptEslint.plugin,
|
||||||
|
},
|
||||||
|
|
||||||
|
languageOptions: {
|
||||||
|
parser: typescriptEslint.parser,
|
||||||
|
ecmaVersion: 2022,
|
||||||
|
sourceType: "module",
|
||||||
|
},
|
||||||
|
|
||||||
|
rules: {
|
||||||
|
"@typescript-eslint/naming-convention": ["warn", {
|
||||||
|
selector: "import",
|
||||||
|
format: ["camelCase", "PascalCase"],
|
||||||
|
}],
|
||||||
|
|
||||||
|
curly: "warn",
|
||||||
|
eqeqeq: "warn",
|
||||||
|
"no-throw-literal": "warn",
|
||||||
|
semi: "warn",
|
||||||
|
},
|
||||||
|
}];
|
||||||
52
package.json
Normal file
52
package.json
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"name": "tatr-vsc",
|
||||||
|
"displayName": "tatr-vsc",
|
||||||
|
"description": "VSCode extension for tatr",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"engines": {
|
||||||
|
"vscode": "^1.138.0"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"Other"
|
||||||
|
],
|
||||||
|
"activationEvents": [],
|
||||||
|
"main": "./dist/extension.js",
|
||||||
|
"contributes": {
|
||||||
|
"commands": [
|
||||||
|
{
|
||||||
|
"command": "tatr-vsc.healthCheck",
|
||||||
|
"title": "Tatr Health Check"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"vscode:prepublish": "pnpm run package",
|
||||||
|
"compile": "pnpm run check-types && pnpm run lint && node esbuild.js",
|
||||||
|
"watch": "npm-run-all -p watch:*",
|
||||||
|
"watch:esbuild": "node esbuild.js --watch",
|
||||||
|
"watch:tsc": "tsc --noEmit --watch --project tsconfig.json",
|
||||||
|
"package": "pnpm run check-types && pnpm run lint && node esbuild.js --production",
|
||||||
|
"compile-tests": "tsc -p . --outDir out",
|
||||||
|
"watch-tests": "tsc -p . -w --outDir out",
|
||||||
|
"pretest": "pnpm run compile-tests && pnpm run compile && pnpm run lint",
|
||||||
|
"check-types": "tsc --noEmit",
|
||||||
|
"lint": "eslint src",
|
||||||
|
"test": "vscode-test"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/vscode": "^1.138.0",
|
||||||
|
"@types/mocha": "^10.0.10",
|
||||||
|
"@types/node": "24.x",
|
||||||
|
"typescript-eslint": "^8.61.1",
|
||||||
|
"eslint": "^10.5.0",
|
||||||
|
"esbuild": "^0.28.1",
|
||||||
|
"npm-run-all": "^4.1.5",
|
||||||
|
"typescript": "^6.0.3",
|
||||||
|
"@vscode/test-cli": "^0.0.15",
|
||||||
|
"@vscode/test-electron": "^3.0.0"
|
||||||
|
},
|
||||||
|
"overrides": {
|
||||||
|
"diff": "^8.0.4",
|
||||||
|
"serialize-javascript": "^7.0.6"
|
||||||
|
}
|
||||||
|
}
|
||||||
3364
pnpm-lock.yaml
generated
Normal file
3364
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
2
pnpm-workspace.yaml
Normal file
2
pnpm-workspace.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
allowBuilds:
|
||||||
|
esbuild: set this to true or false
|
||||||
13
src/extension.ts
Normal file
13
src/extension.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import * as vscode from "vscode";
|
||||||
|
|
||||||
|
export const activate = (context: vscode.ExtensionContext) => {
|
||||||
|
console.log("Extension ready");
|
||||||
|
|
||||||
|
const disposable = vscode.commands.registerCommand("tatr-vsc.healthCheck", () => {
|
||||||
|
vscode.window.showInformationMessage("Ok");
|
||||||
|
});
|
||||||
|
|
||||||
|
context.subscriptions.push(disposable);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const deactivate = () => {};
|
||||||
11
src/test/extension.test.ts
Normal file
11
src/test/extension.test.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import * as assert from "assert";
|
||||||
|
import * as vscode from "vscode";
|
||||||
|
|
||||||
|
suite("Extension Test Suite", () => {
|
||||||
|
vscode.window.showInformationMessage("Start all tests.");
|
||||||
|
|
||||||
|
test("Sample test", () => {
|
||||||
|
assert.strictEqual(-1, [1, 2, 3].indexOf(5));
|
||||||
|
assert.strictEqual(-1, [1, 2, 3].indexOf(0));
|
||||||
|
});
|
||||||
|
});
|
||||||
19
tsconfig.json
Normal file
19
tsconfig.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "Node16",
|
||||||
|
"target": "ES2022",
|
||||||
|
"lib": [
|
||||||
|
"ES2022"
|
||||||
|
],
|
||||||
|
"types": [
|
||||||
|
"node",
|
||||||
|
"mocha"
|
||||||
|
],
|
||||||
|
"sourceMap": true,
|
||||||
|
"rootDir": "src",
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"noUnusedParameters": true,
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user