Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@
"--disable-workspace-trust",
"--disable-extensions"
],
"outFiles": ["${workspaceRoot}/packages/extension/dist/client/**/*.js"]
"outFiles": ["${workspaceRoot}/packages/extension/dist/client/**/*.js", "${workspaceRoot}/packages/extension/**"]
},
{
"name": "Attach to Server",
"type": "node",
"request": "attach",
"address": "localhost",
"port": 6060,
"outFiles": ["${workspaceRoot}/packages/extension/dist/server/**/*.js"]
"outFiles": ["${workspaceRoot}/packages/extension/dist/server/**/*.js", "${workspaceRoot}/packages/extension/**"]
},
{
"name": "Run Extension Tests",
Expand Down
1 change: 1 addition & 0 deletions lerna.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"packages/docgen",
"packages/errors",
"packages/eslint",
"packages/extension",
"packages/fixture",
"packages/knip",
"packages/logger",
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@
"test:extension": "lerna run test:extension",
"prepublishOnly": "npm run build:publish",
"publish": "lerna publish --conventional-commits --no-commit-hooks --yes",
"prepare": "patch-package && husky"
"prepare": "patch-package && husky",
"package:extension": "lerna run compile:packages && lerna run package2"
},
"engines": {
"node": ">=18"
Expand Down
37 changes: 23 additions & 14 deletions packages/extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"publisher": "Betterer",
"private": true,
"description": "VSCode extension for @betterer/betterer",
"version": "5.4.0",
"version": "6.0.0-dev",
"main": "./dist/client/client.js",
"author": "Craig Spence <[email protected]>",
"homepage": "https://phenomnomnominal.github.io/betterer",
Expand All @@ -16,7 +16,7 @@
"url": "https://github.com/phenomnomnominal/betterer/issues"
},
"engines": {
"vscode": "^1.62.0"
"vscode": "^1.101.0"
},
"categories": [
"Linters"
Expand Down Expand Up @@ -74,6 +74,12 @@
".*"
],
"description": "Select tests to run by RegExp. Takes multiple values"
},
"betterer.ci": {
"scope": "resource",
"type": "boolean",
"default": false,
"description": "Controls whether Betterer is running in Continuous Integration mode. If enabled, the result file will not be updated."
}
}
},
Expand Down Expand Up @@ -109,35 +115,38 @@
]
},
"scripts": {
"build:extension": "npm run bundle && npm run compile:test",
"build:extension": "npm run bundle",
"bundle": "npm run webpack:client && npm run webpack:server",
"compile:test": "tsc --project ./tsconfig.e2e.json",
"watch": "run-p webpack:client:watch webpack:server:watch",
"webpack:client": "webpack --config webpack.client.config.js",
"webpack:client:watch": "webpack --config webpack.client.config.js --watch",
"webpack:server": "webpack --config webpack.server.config.js",
"webpack:server:watch": "webpack --config webpack.server.config.js --watch",
"package": "vsce package --npm",
"package": "vsce package",
"package2": "vsce package --no-dependencies",
"test:extension": "node ./dist/test/runner/index.js",
"vscode:prepublish": "npm run build:extension"
},
"dependencies": {
"lodash.debounce": "^4.0.8",
"vscode-languageclient": "^7.0.0",
"vscode-languageserver": "^7.0.0",
"vscode-languageserver-textdocument": "^1.0.3",
"vscode-languageclient": "^9.0.1",
"vscode-languageserver": "^9.0.1",
"vscode-languageserver-textdocument": "^1.0.12",
"vscode-uri": "^3.0.2"
},
"devDependencies": {
"@betterer/betterer": "^5.4.0",
"@betterer/cli": "^5.4.0",
"@betterer/errors": "^5.3.0",
"@betterer/logger": "^5.3.4",
"@betterer/betterer": "^6.0.0-alpha.1",
"@betterer/cli": "^6.0.0-alpha.1",
"@betterer/errors": "^6.0.0-alpha.1",
"@betterer/logger": "^6.0.0-alpha.1",
"@types/jest": "^30.0.0",
"@types/jest-cli": "^24.3.0",
"@types/lodash.debounce": "^4.0.6",
"@types/vscode": "^1.62.0",
"@types/lodash.debounce": "^4.0.9",
"@types/vscode": "^1.101.0",
"@vscode/vsce": "^3.5.0",
"jest-cli": "^27.4.3",
"ts-loader": "^9.4.2",
"ts-loader": "^9.5.2",
"vscode-test": "^1.6.1",
"webpack": "^5.82.1",
"webpack-cli": "^5.1.1",
Expand Down
12 changes: 6 additions & 6 deletions packages/extension/src/client/commands/disable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import type { WorkspaceFolder } from 'vscode';

import { workspace } from 'vscode';

import { EXTENSION_NAME } from '../../constants.js';
import { ALREADY_DISABLED, DISABLE_COMMAND_REQUIRES_WORKSPACE } from '../error-messages.js';
import { error, info } from '../logger.js';
import { disable, getEnabled } from '../settings.js';
import { pickFolder } from './folder-picker.js';
import { EXTENSION_NAME } from '../../constants';
import { ALREADY_DISABLED, DISABLE_COMMAND_REQUIRES_WORKSPACE } from '../error-messages';
import { error, info } from '../logger';
import { disable, getEnabled } from '../settings';
import { pickFolder } from './folder-picker';

export async function disableBetterer(): Promise<void> {
const { workspaceFolders } = workspace;
Expand All @@ -23,7 +23,7 @@ export async function disableBetterer(): Promise<void> {

let folder: WorkspaceFolder | null = null;
if (enabledFolders.length === 1) {
[folder] = enabledFolders;
folder = enabledFolders[0] ?? null;
} else {
folder = await pickFolder(enabledFolders, `Select a workspace folder to disable ${EXTENSION_NAME} in`);
}
Expand Down
12 changes: 6 additions & 6 deletions packages/extension/src/client/commands/enable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import type { WorkspaceFolder } from 'vscode';

import { workspace } from 'vscode';

import { EXTENSION_NAME } from '../../constants.js';
import { ALREADY_ENABLED, ENABLE_COMMAND_REQUIRES_WORKSPACE } from '../error-messages.js';
import { error, info } from '../logger.js';
import { enable, getEnabled } from '../settings.js';
import { pickFolder } from './folder-picker.js';
import { EXTENSION_NAME } from '../../constants';
import { ALREADY_ENABLED, ENABLE_COMMAND_REQUIRES_WORKSPACE } from '../error-messages';
import { error, info } from '../logger';
import { enable, getEnabled } from '../settings';
import { pickFolder } from './folder-picker';

export async function enableBetterer(): Promise<void> {
const { workspaceFolders } = workspace;
Expand All @@ -23,7 +23,7 @@ export async function enableBetterer(): Promise<void> {

let folder: WorkspaceFolder | null = null;
if (disabledFolders.length === 1) {
[folder] = disabledFolders;
folder = disabledFolders[0] ?? null;
} else {
folder = await pickFolder(disabledFolders, `Select a workspace folder to enable ${EXTENSION_NAME} in:`);
}
Expand Down
8 changes: 4 additions & 4 deletions packages/extension/src/client/commands/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export { disableBetterer } from './disable.js';
export { enableBetterer } from './enable.js';
export { initBetterer } from './init.js';
export { disableBetterer } from './disable';
export { enableBetterer } from './enable';
export { initBetterer } from './init';

export { COMMAND_NAMES } from './names.js';
export { COMMAND_NAMES } from './names';
10 changes: 5 additions & 5 deletions packages/extension/src/client/commands/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import fs from 'node:fs';
import path from 'node:path';
import { window, workspace } from 'vscode';

import { EXTENSION_NAME } from '../../constants.js';
import { ALREADY_CONFIGURED, INIT_COMMAND_REQUIRES_WORKSPACE } from '../error-messages.js';
import { error, info } from '../logger.js';
import { pickFolder } from './folder-picker.js';
import { EXTENSION_NAME } from '../../constants';
import { ALREADY_CONFIGURED, INIT_COMMAND_REQUIRES_WORKSPACE } from '../error-messages';
import { error, info } from '../logger';
import { pickFolder } from './folder-picker';

const CONFIG_FILES = ['.betterer.ts', '.betterer.js'];

Expand All @@ -31,7 +31,7 @@ export async function initBetterer(): Promise<void> {

let folder: WorkspaceFolder | null = null;
if (foldersWithoutConfig.length === 1) {
[folder] = workspaceFolders;
folder = foldersWithoutConfig[0] ?? null;
} else {
folder = await pickFolder(foldersWithoutConfig, `Select a workspace folder to initialise ${EXTENSION_NAME} in:`);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/extension/src/client/error-messages.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { WorkspaceFolder } from 'vscode';

import { EXTENSION_NAME } from '../constants.js';
import { EXTENSION_NAME } from '../constants';

const NAME = EXTENSION_NAME;
const BETTERER_TS = `.betterer.ts`;
Expand Down
27 changes: 13 additions & 14 deletions packages/extension/src/client/extension.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import type { ExtensionContext } from 'vscode';
import type { ErrorAction, ErrorHandler } from 'vscode-languageclient/node';
import type { ErrorHandler } from 'vscode-languageclient/node';

import assert from 'node:assert';
import { commands } from 'vscode';
import { CloseAction, LanguageClient } from 'vscode-languageclient/node';
import { EXTENSION_NAME } from '../constants.js';
import { COMMAND_NAMES, disableBetterer, enableBetterer, initBetterer } from './commands/index.js';
import { CLIENT_START_FAILED, SERVER_START_FAILED } from './error-messages.js';
import { error } from './logger.js';
import { getClientOptions, getServerOptions } from './options.js';
import { BettererInvalidConfigRequest, BettererNoLibraryRequest, invalidConfig, noLibrary } from './requests/index.js';
import { BettererStatusBar } from './status.js';
import { EXTENSION_NAME } from '../constants';
import { COMMAND_NAMES, disableBetterer, enableBetterer, initBetterer } from './commands/index';
import { CLIENT_START_FAILED, SERVER_START_FAILED } from './error-messages';
import { error } from './logger';
import { getClientOptions, getServerOptions } from './options';
import { BettererInvalidConfigRequest, BettererNoLibraryRequest, invalidConfig, noLibrary } from './requests/index';
import { BettererStatusBar } from './status';

export async function activate(context: ExtensionContext): Promise<void> {
context.subscriptions.push(
Expand All @@ -31,15 +31,16 @@ export async function activate(context: ExtensionContext): Promise<void> {
client.error(SERVER_START_FAILED, error);
return false;
},
error: (error, message, count): ErrorAction => {
error: (error, message, count) => {
assert(errorHandler);
errorHandler.error(error, message, count)
return errorHandler.error(error, message, count);
},
closed: (): CloseAction => {
closed: () => {
assert(status);
assert(errorHandler);
if (status.hasExited) {
return CloseAction.DoNotRestart;
return {action: CloseAction.DoNotRestart};
}
return errorHandler.closed();
}
Expand All @@ -48,8 +49,7 @@ export async function activate(context: ExtensionContext): Promise<void> {
status = new BettererStatusBar(client);
errorHandler = client.createDefaultErrorHandler();

const started = client.start();
await client.onReady();
await client.start();

client.onRequest(BettererInvalidConfigRequest, (params) => invalidConfig(client, context, params));
client.onRequest(BettererNoLibraryRequest, (params) => noLibrary(client, context, params));
Expand All @@ -58,7 +58,6 @@ export async function activate(context: ExtensionContext): Promise<void> {
commands.registerCommand(COMMAND_NAMES.showOutputChannel, () => {
client.outputChannel.show();
}),
started,
status
);
} catch {
Expand Down
4 changes: 2 additions & 2 deletions packages/extension/src/client/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import path from 'node:path';
import { workspace } from 'vscode';
import { RevealOutputChannelOn, TransportKind } from 'vscode-languageclient/node';

import { EXTENSION_NAME } from '../constants.js';
import { getRuntime } from './settings.js';
import { EXTENSION_NAME } from '../constants';
import { getRuntime } from './settings';

export function getServerOptions(context: ExtensionContext): ServerOptions {
const serverModule = context.asAbsolutePath(path.join('dist', 'server', 'server.js'));
Expand Down
4 changes: 2 additions & 2 deletions packages/extension/src/client/requests/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export { BettererInvalidConfigRequest, invalidConfig } from './invalid-config.js';
export { BettererNoLibraryRequest, noLibrary } from './no-library.js';
export { BettererInvalidConfigRequest, invalidConfig } from './invalid-config';
export { BettererNoLibraryRequest, noLibrary } from './no-library';
8 changes: 4 additions & 4 deletions packages/extension/src/client/requests/invalid-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import {
BETTERER_CONFIG_FILE_INVALID,
BETTERER_CONFIG_FILE_INVALID_DETAILS,
BETTERER_OUTPUT_CHANNEL
} from '../error-messages.js';
import { info } from '../logger.js';
import type { BettererRequestParams } from './types.js';
import { getInvalidConfigState } from './state.js';
} from '../error-messages';
import { info } from '../logger';
import type { BettererRequestParams } from './types';
import { getInvalidConfigState } from './state';

export const BettererInvalidConfigRequest = new RequestType<BettererRequestParams, void, void>(
'betterer/invalidConfig'
Expand Down
8 changes: 4 additions & 4 deletions packages/extension/src/client/requests/no-library.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { ExtensionContext } from 'vscode';
import type { LanguageClient } from 'vscode-languageclient/node';

import type { BettererRequestParams } from './types.js';
import type { BettererRequestParams } from './types';

import { Uri, workspace } from 'vscode';
import { RequestType } from 'vscode-languageclient/node';
Expand All @@ -10,9 +10,9 @@ import {
BETTERER_LIBRARY_NOT_INSTALLED,
BETTERER_LIBRARY_NOT_INSTALLED_DETAILS,
BETTERER_OUTPUT_CHANNEL
} from '../error-messages.js';
import { info } from '../logger.js';
import { getNoLibraryState } from './state.js';
} from '../error-messages';
import { info } from '../logger';
import { getNoLibraryState } from './state';

export const BettererNoLibraryRequest = new RequestType<BettererRequestParams, void, void>('betterer/noLibrary');

Expand Down
14 changes: 7 additions & 7 deletions packages/extension/src/client/status.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import type { LanguageClient } from 'vscode-languageclient/node';

import { StatusBarAlignment, window } from 'vscode';
import { NotificationType, State } from 'vscode-languageclient/node';
import { EXTENSION_NAME } from '../constants.js';
import { BettererStatus } from '../status.js';
import { COMMAND_NAMES } from './commands/index.js';
import { SERVER_PROCESS_ENDED, SERVER_PROCESS_SHUT_DOWN } from './error-messages.js';
import { error } from './logger.js';
import { getAlwaysShowStatus } from './settings.js';
import { EXTENSION_NAME } from '../constants';
import { BettererStatus } from '../status';
import { COMMAND_NAMES } from './commands/index';
import { SERVER_PROCESS_ENDED, SERVER_PROCESS_SHUT_DOWN } from './error-messages';
import { error } from './logger';
import { getAlwaysShowStatus } from './settings';

const SERVER_RUNNING = `${EXTENSION_NAME} is running.`;
const SERVER_STOPPED = `${EXTENSION_NAME} stopped.`;
Expand Down Expand Up @@ -67,7 +67,7 @@ export class BettererStatusBar {
}
});

await client.onReady();
await client.start();

client.onNotification(BettererStatusNotification, (status) => {
this.update(status);
Expand Down
8 changes: 5 additions & 3 deletions packages/extension/src/server/betterer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import type { betterer, BettererOptionsRunner, BettererRunner } from '@betterer/

import { Files } from 'vscode-languageserver/node';

import { nodeRequire } from '../utils.js';
import { trace } from './trace.js';
import { nodeRequire } from '../utils';
import { trace } from './trace';

type BettererLibrary = typeof betterer;
interface BettererModule {
Expand All @@ -20,13 +20,15 @@ export async function hasBetterer(cwd: string): Promise<boolean> {

export async function getRunner(cwd: string, options: BettererOptionsRunner): Promise<BettererRunner> {
const key = JSON.stringify(options);
// TODO: VD: use better key since no order guaranteed in options key,
// example of options: "{\"cache\":true,\"cachePath\":\"c:\\\\Repos\\\\ClinTrakImaging\\\\Projects\\\\angular\\\\.betterer.cache\",\"configPaths\":[\"c:\\\\Repos\\\\ClinTrakImaging\\\\Projects\\\\angular\\\\.betterer.ts\"],\"filters\":[\".*\"],\"resultsPath\":\"c:\\\\Repos\\\\ClinTrakImaging\\\\Projects\\\\angular\\\\.betterer_extension.results\",\"silent\":true}"
const existingRunner = RUNNERS.get(key);
if (existingRunner) {
return existingRunner;
}
const { runner } = await getLibrary(cwd);
const toCache = await runner(options);
RUNNERS.set(key, toCache);
//RUNNERS.set(key, toCache);
return toCache;
}

Expand Down
Loading