feat: vscode extension setup

This commit is contained in:
2026-09-25 21:49:27 +02:00
parent d06b9e4fb6
commit 1ec8a29bcf
14 changed files with 3588 additions and 0 deletions

9
.editorconfig Normal file
View 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
View File

@@ -0,0 +1,7 @@
node_modules/
dist/
out/
.vscode-test/
*.vsix
*.log
.DS_Store

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
enable-pre-post-scripts = true

5
.vscode-test.mjs Normal file
View File

@@ -0,0 +1,5 @@
import { defineConfig } from "@vscode/test-cli";
export default defineConfig({
files: "out/test/**/*.test.js",
});

14
.vscodeignore Normal file
View 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
View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load Diff

2
pnpm-workspace.yaml Normal file
View File

@@ -0,0 +1,2 @@
allowBuilds:
esbuild: set this to true or false

13
src/extension.ts Normal file
View 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 = () => {};

View 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
View 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,
}
}