From 8ff20e565b31f97cadd94c0961f3bf3fe8047fe9 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Thu, 11 Jul 2024 09:18:48 +0200 Subject: [PATCH] Restructure --- .../cursorless-engine/src/cursorlessEngine.ts | 14 +++++---- packages/cursorless-engine/src/index.ts | 1 + .../src/nodeCommon/README.md | 3 -- .../src/scopeProviders/TalonSpokenForms.ts | 10 +++++++ packages/cursorless-vscode/package.json | 1 + packages/cursorless-vscode/src/extension.ts | 3 ++ packages/cursorless-vscode/tsconfig.json | 3 ++ packages/node-common/package.json | 30 +++++++++++++++++++ .../src}/TalonSpokenFormsJsonReader.ts | 15 +++++++--- packages/node-common/src/index.ts | 1 + packages/node-common/tsconfig.json | 17 +++++++++++ pnpm-lock.yaml | 12 ++++++++ tsconfig.json | 3 ++ 13 files changed, 100 insertions(+), 13 deletions(-) delete mode 100644 packages/cursorless-engine/src/nodeCommon/README.md create mode 100644 packages/node-common/package.json rename packages/{cursorless-engine/src/nodeCommon => node-common/src}/TalonSpokenFormsJsonReader.ts (90%) create mode 100644 packages/node-common/src/index.ts create mode 100644 packages/node-common/tsconfig.json diff --git a/packages/cursorless-engine/src/cursorlessEngine.ts b/packages/cursorless-engine/src/cursorlessEngine.ts index 0b4eafb33f..e323c376da 100644 --- a/packages/cursorless-engine/src/cursorlessEngine.ts +++ b/packages/cursorless-engine/src/cursorlessEngine.ts @@ -4,9 +4,10 @@ import { FileSystem, Hats, IDE, - ensureCommandShape, ScopeProvider, + ensureCommandShape, } from "@cursorless/common"; +import { KeyboardTargetUpdater } from "./KeyboardTargetUpdater"; import { CommandRunnerDecorator, CursorlessEngine, @@ -18,7 +19,6 @@ import { StoredTargetMap } from "./core/StoredTargets"; import { RangeUpdater } from "./core/updateSelections/RangeUpdater"; import { CustomSpokenFormGeneratorImpl } from "./generateSpokenForm/CustomSpokenFormGeneratorImpl"; import { LanguageDefinitions } from "./languages/LanguageDefinitions"; -import { TalonSpokenFormsJsonReader } from "./nodeCommon/TalonSpokenFormsJsonReader"; import { ModifierStageFactoryImpl } from "./processTargets/ModifierStageFactoryImpl"; import { ScopeHandlerFactoryImpl } from "./processTargets/modifiers/scopeHandlers"; import { runCommand } from "./runCommand"; @@ -28,9 +28,12 @@ import { ScopeRangeProvider } from "./scopeProviders/ScopeRangeProvider"; import { ScopeRangeWatcher } from "./scopeProviders/ScopeRangeWatcher"; import { ScopeSupportChecker } from "./scopeProviders/ScopeSupportChecker"; import { ScopeSupportWatcher } from "./scopeProviders/ScopeSupportWatcher"; +import { + DisabledTalonSpokenForms, + type TalonSpokenForms, +} from "./scopeProviders/TalonSpokenForms"; import { injectIde } from "./singletons/ide.singleton"; import { TreeSitter } from "./typings/TreeSitter"; -import { KeyboardTargetUpdater } from "./KeyboardTargetUpdater"; export async function createCursorlessEngine( treeSitter: TreeSitter, @@ -38,6 +41,7 @@ export async function createCursorlessEngine( hats: Hats, commandServerApi: CommandServerApi | null, fileSystem: FileSystem, + talonSpokenForms: TalonSpokenForms | undefined, ): Promise { injectIde(ide); @@ -63,10 +67,8 @@ export async function createCursorlessEngine( const languageDefinitions = new LanguageDefinitions(fileSystem, treeSitter); await languageDefinitions.init(); - const talonSpokenForms = new TalonSpokenFormsJsonReader(fileSystem); - const customSpokenFormGenerator = new CustomSpokenFormGeneratorImpl( - talonSpokenForms, + talonSpokenForms ?? new DisabledTalonSpokenForms(), ); ide.disposeOnExit( diff --git a/packages/cursorless-engine/src/index.ts b/packages/cursorless-engine/src/index.ts index dfe8e57fd9..367f9daa8f 100644 --- a/packages/cursorless-engine/src/index.ts +++ b/packages/cursorless-engine/src/index.ts @@ -12,3 +12,4 @@ export * from "./CommandHistory"; export * from "./CommandHistoryAnalyzer"; export * from "./util/grammarHelpers"; export * from "./ScopeTestRecorder"; +export * from "./scopeProviders/TalonSpokenForms"; diff --git a/packages/cursorless-engine/src/nodeCommon/README.md b/packages/cursorless-engine/src/nodeCommon/README.md deleted file mode 100644 index 7e20bf48c3..0000000000 --- a/packages/cursorless-engine/src/nodeCommon/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Node common - -This directory contains utilities that are available in a node.js context. diff --git a/packages/cursorless-engine/src/scopeProviders/TalonSpokenForms.ts b/packages/cursorless-engine/src/scopeProviders/TalonSpokenForms.ts index c3c10dfd4a..537a2c0c9e 100644 --- a/packages/cursorless-engine/src/scopeProviders/TalonSpokenForms.ts +++ b/packages/cursorless-engine/src/scopeProviders/TalonSpokenForms.ts @@ -13,6 +13,16 @@ export interface TalonSpokenForms { onDidChange: Notifier["registerListener"]; } +export class DisabledTalonSpokenForms implements TalonSpokenForms { + getSpokenFormEntries() { + return Promise.resolve([]); + } + + onDidChange() { + return { dispose: () => {} }; + } +} + /** * The types of entries for which we currently support getting custom spoken * forms from Talon. diff --git a/packages/cursorless-vscode/package.json b/packages/cursorless-vscode/package.json index c31e9d9de5..2ad1164feb 100644 --- a/packages/cursorless-vscode/package.json +++ b/packages/cursorless-vscode/package.json @@ -1240,6 +1240,7 @@ "dependencies": { "@cursorless/common": "workspace:*", "@cursorless/cursorless-engine": "workspace:*", + "@cursorless/node-common": "workspace:*", "@cursorless/vscode-common": "workspace:*", "immer": "^10.0.4", "itertools": "^2.2.5", diff --git a/packages/cursorless-vscode/src/extension.ts b/packages/cursorless-vscode/src/extension.ts index e6d5a3f6e5..b5137ae27c 100644 --- a/packages/cursorless-vscode/src/extension.ts +++ b/packages/cursorless-vscode/src/extension.ts @@ -51,6 +51,7 @@ import { import { StatusBarItem } from "./StatusBarItem"; import { storedTargetHighlighter } from "./storedTargetHighlighter"; import { vscodeApi } from "./vscodeApi"; +import { TalonSpokenFormsJsonReader } from "@cursorless/node-common"; /** * Extension entrypoint called by VSCode on Cursorless startup. @@ -82,6 +83,7 @@ export async function activate( : await getCommandServerApi(); const treeSitter: TreeSitter = createTreeSitter(parseTreeApi); + const talonSpokenForms = new TalonSpokenFormsJsonReader(fileSystem); const { commandApi, @@ -99,6 +101,7 @@ export async function activate( hats, commandServerApi, fileSystem, + talonSpokenForms, ); addCommandRunnerDecorator( diff --git a/packages/cursorless-vscode/tsconfig.json b/packages/cursorless-vscode/tsconfig.json index 7564228e28..a22e15ffa7 100644 --- a/packages/cursorless-vscode/tsconfig.json +++ b/packages/cursorless-vscode/tsconfig.json @@ -13,6 +13,9 @@ { "path": "../cursorless-engine" }, + { + "path": "../node-common" + }, { "path": "../vscode-common" } diff --git a/packages/node-common/package.json b/packages/node-common/package.json new file mode 100644 index 0000000000..de9cb03352 --- /dev/null +++ b/packages/node-common/package.json @@ -0,0 +1,30 @@ +{ + "name": "@cursorless/node-common", + "version": "1.0.0", + "description": "Cursorless common utilities for node", + "main": "./out/index.js", + "scripts": { + "compile:tsc": "tsc --build", + "compile:esbuild": "esbuild ./src/index.ts --sourcemap --format=esm --bundle --packages=external --outfile=./out/index.js", + "compile": "pnpm compile:tsc && pnpm compile:esbuild", + "watch:tsc": "pnpm compile:tsc --watch", + "watch:esbuild": "pnpm compile:esbuild --watch", + "watch": "pnpm run --filter @cursorless/node-common --parallel '/^watch:.*/'", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + }, + "keywords": [], + "author": "", + "license": "MIT", + "type": "module", + "types": "./out/index.d.ts", + "exports": { + ".": { + "cursorless:bundler": "./src/index.ts", + "default": "./out/index.js" + } + }, + "dependencies": { + "@cursorless/common": "workspace:*", + "@cursorless/cursorless-engine": "workspace:*" + } +} diff --git a/packages/cursorless-engine/src/nodeCommon/TalonSpokenFormsJsonReader.ts b/packages/node-common/src/TalonSpokenFormsJsonReader.ts similarity index 90% rename from packages/cursorless-engine/src/nodeCommon/TalonSpokenFormsJsonReader.ts rename to packages/node-common/src/TalonSpokenFormsJsonReader.ts index 26c6db93bb..77bfe15591 100644 --- a/packages/cursorless-engine/src/nodeCommon/TalonSpokenFormsJsonReader.ts +++ b/packages/node-common/src/TalonSpokenFormsJsonReader.ts @@ -1,12 +1,17 @@ -import { Disposable, FileSystem, Notifier } from "@cursorless/common"; +import { + Disposable, + FileSystem, + Notifier, + type Listener, +} from "@cursorless/common"; import { readFile } from "fs/promises"; -import * as path from "path"; import { NeedsInitialTalonUpdateError, SpokenFormEntry, TalonSpokenForms, -} from "../scopeProviders/TalonSpokenForms"; +} from "@cursorless/cursorless-engine"; +import * as path from "path"; interface TalonSpokenFormsPayload { version: number; @@ -31,7 +36,9 @@ export class TalonSpokenFormsJsonReader implements TalonSpokenForms { * @param callback The callback to run when the scope ranges change * @returns A {@link Disposable} which will stop the callback from running */ - onDidChange = this.notifier.registerListener; + onDidChange(listener: Listener) { + return this.notifier.registerListener(listener); + } async getSpokenFormEntries(): Promise { let payload: TalonSpokenFormsPayload; diff --git a/packages/node-common/src/index.ts b/packages/node-common/src/index.ts new file mode 100644 index 0000000000..32860ca855 --- /dev/null +++ b/packages/node-common/src/index.ts @@ -0,0 +1 @@ +export * from "./TalonSpokenFormsJsonReader"; diff --git a/packages/node-common/tsconfig.json b/packages/node-common/tsconfig.json new file mode 100644 index 0000000000..d024e806b2 --- /dev/null +++ b/packages/node-common/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "es2020", + "rootDir": "src", + "outDir": "out" + }, + "references": [ + { + "path": "../common" + }, + { + "path": "../cursorless-engine" + } + ], + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d7316a3fa3..7a03d0e8d2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -457,6 +457,9 @@ importers: '@cursorless/cursorless-engine': specifier: workspace:* version: link:../cursorless-engine + '@cursorless/node-common': + specifier: workspace:* + version: link:../node-common '@cursorless/vscode-common': specifier: workspace:* version: link:../vscode-common @@ -638,6 +641,15 @@ importers: specifier: ^0.20.2 version: 0.20.2 + packages/node-common: + dependencies: + '@cursorless/common': + specifier: workspace:* + version: link:../common + '@cursorless/cursorless-engine': + specifier: workspace:* + version: link:../cursorless-engine + packages/test-harness: dependencies: '@cursorless/common': diff --git a/tsconfig.json b/tsconfig.json index e05ff589f5..4baad08a08 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -29,6 +29,9 @@ { "path": "./packages/meta-updater" }, + { + "path": "./packages/node-common" + }, { "path": "./packages/test-harness" },