Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
116 changes: 81 additions & 35 deletions oxlint.config.mts
Original file line number Diff line number Diff line change
@@ -1,20 +1,36 @@
import type { OxlintConfig } from "oxlint";
import { defineConfig } from "oxlint";

// These rules should probably be re-enabled eventually
const temporarilyDisabled = [
"eslint/no-param-reassign",
"eslint/no-shadow",
"eslint/prefer-template",
"import/no-default-export",
"typescript/no-unsafe-type-assertion",
"unicorn/no-array-reduce",
];

const disabledRules = [
...temporarilyDisabled,
"eslint/arrow-body-style",
"eslint/capitalized-comments",
"eslint/class-methods-use-this",
"eslint/complexity",
"eslint/func-names",
"eslint/id-length",
"eslint/init-declarations",
"eslint/max-classes-per-file",
"eslint/max-lines-per-function",
"eslint/max-lines",
"eslint/max-params",
"eslint/max-statements",
"eslint/no-await-in-loop",
"eslint/no-console",
"eslint/no-continue",
"eslint/no-eq-null",
"eslint/no-lonely-if",
"eslint/no-loop-func",
"eslint/no-magic-numbers",
"eslint/no-negated-condition",
"eslint/no-plusplus",
Expand All @@ -36,15 +52,20 @@ const disabledRules = [
"import/no-relative-parent-imports",
"import/prefer-default-export",
"oxc/no-async-await",
"oxc/no-barrel-file",
"oxc/no-map-spread",
"oxc/no-optional-chaining",
"oxc/no-rest-spread-properties",
"promise/always-return",
"promise/avoid-new",
"promise/prefer-await-to-callbacks",
"react-perf/jsx-no-new-function-as-prop",
"react/jsx-max-depth",
"react/no-danger",
"react/no-multi-comp",
"react/only-export-components",
"react/react-in-jsx-scope",
"react/rules-of-hooks",
"typescript/explicit-function-return-type",
"typescript/parameter-properties",
"typescript/prefer-readonly-parameter-types",
Expand All @@ -53,14 +74,33 @@ const disabledRules = [
"unicorn/filename-case",
"unicorn/no-array-callback-reference",
"unicorn/no-array-for-each",
"unicorn/no-array-reverse",
"unicorn/no-array-sort",
"unicorn/no-lonely-if",
"unicorn/no-null",
"unicorn/no-object-as-default-parameter",
"unicorn/no-useless-undefined",
"unicorn/prefer-at",
"unicorn/prefer-event-target",
"unicorn/prefer-module",
"unicorn/prefer-query-selector",
"unicorn/prefer-spread",
"unicorn/prefer-ternary",
"unicorn/require-post-message-target-origin",
"unicorn/switch-case-braces",
];

const plugins: OxlintConfig["plugins"] = [
"eslint",
"unicorn",
"oxc",
"import",
"node",
"promise",
"react",
"react-perf",
];

// oxlint-disable-next-line import/no-default-export
export default defineConfig({
ignorePatterns: [
Expand All @@ -69,43 +109,36 @@ export default defineConfig({
"packages/app-vscode/src/keyboard/grammar/generated/**",
"packages/lib-engine/src/customCommandGrammar/generated/**",
"packages/lib-engine/src/snippets/vendor/**",
"**/*.d.ts",
],
options: {
typeAware: true,
typeCheck: false,
},
plugins: [
"eslint",
"typescript",
"unicorn",
"oxc",
"import",
"node",
"promise",
"react",
"react-perf",
],
plugins,
jsPlugins: [
{
name: "mocha",
specifier: "eslint-plugin-mocha",
},
],
categories: {
correctness: "warn",
suspicious: "warn",
pedantic: "warn",
perf: "warn",
style: "warn",
restriction: "warn",
// Disabled since nursery contains rules under development that may change
// nursery: "warn",
},

rules: {
...Object.fromEntries(disabledRules.map((r) => [r, "off"])),
curly: "warn",
eqeqeq: [
"warn",
"always",
{
null: "never",
},
],
"eslint/no-constant-condition": [
"eslint/no-duplicate-imports": [
"warn",
{
checkLoops: false,
allowSeparateTypeImports: true,
},
],
"eslint/no-restricted-imports": [
Expand All @@ -125,41 +158,54 @@ export default defineConfig({
],
},
],
"eslint/no-throw-literal": "warn",
"eslint/no-unused-vars": [
"warn",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
caughtErrorsIgnorePattern: "^_",
ignoreRestSiblings: true,
},
],
"import/no-duplicates": "warn",
"mocha/no-exclusive-tests": "warn",
"mocha/no-pending-tests": "warn",
"import/no-unassigned-import": [
"warn",
{
allow: ["**/*.css"],
},
],
"no-warning-comments": [
"warn",
{
terms: ["todo"],
},
],
"typescript/consistent-type-assertions": [
"react/jsx-filename-extension": [
"warn",
{
extensions: [".tsx"],
},
],
eqeqeq: [
"warn",
"always",
{
assertionStyle: "as",
null: "never",
},
],
"typescript/consistent-type-imports": "warn",
"typescript/no-base-to-string": "off",
"typescript/restrict-template-expressions": "off",
"typescript/unbound-method": "off",
"unicorn/prefer-module": "warn",
"unicorn/prefer-node-protocol": "warn",
"unicorn/throw-new-error": "warn",
},

overrides: [
{
files: ["**/*.js"],
rules: {
"import/unambiguous": "off",
},
},

{
files: ["**/*.{ts,cts,mts,tsx}"],
plugins: [...plugins, "typescript"],
},

{
files: ["packages/app-vscode/src/scripts/**/*.ts"],
rules: {
Expand Down
9 changes: 6 additions & 3 deletions packages/app-neovim/src/NeovimCommandServerApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ export class NeovimCommandServerApi implements CommandServerApi {
signals: { prePhrase: InboundSignal };

constructor(private client: NeovimClient) {
this.signals = { prePhrase: { getVersion: async () => null } };
this.signals = {
prePhrase: {
getVersion: () => Promise.resolve(null),
},
};
}

// for vscode, it is actually stored into the command-server
Expand All @@ -19,8 +23,7 @@ export class NeovimCommandServerApi implements CommandServerApi {
const currentMode = await this.client.mode;
if (currentMode.mode === "t" || currentMode.mode === "nt") {
return "terminal";
} else {
return "textEditor";
}
return "textEditor";
}
}
2 changes: 1 addition & 1 deletion packages/app-neovim/src/constructTestHelpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export function constructTestHelpers(
injectIde: (ide: IDE) => void,
): NeovimTestHelpers | undefined {
return {
commandServerApi: commandServerApi!,
commandServerApi,
ide: normalizedIde,
neovimIDE,
injectIde,
Expand Down
100 changes: 50 additions & 50 deletions packages/app-neovim/src/registerCommands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ import {
} from "@cursorless/lib-neovim-common";
import { getNeovimRegistry } from "@cursorless/lib-neovim-registry";

export async function registerCommands(
export function registerCommands(
client: NeovimClient,
neovimIDE: NeovimIDE,
commandApi: CommandApi,
commandServerApi: CommandServerApi,
): Promise<void> {
): void {
const commands: Record<CursorlessCommandId, (...args: any[]) => any> = {
// The core Cursorless command
[CURSORLESS_COMMAND_ID]: async (...args: unknown[]) => {
Expand Down Expand Up @@ -55,84 +55,84 @@ export async function registerCommands(
}

return result;
} catch (e) {
} catch (error) {
if (neovimIDE.runMode !== "test") {
const err = e as Error;
console.error(err.stack);
neovimIDE.handleCommandError(err);
if (error instanceof Error) {
console.error(error.stack);
}
neovimIDE.handleCommandError(error);
}
throw e;
throw error;
}
},

["cursorless.repeatPreviousCommand"]: dummyCommandHandler,
"cursorless.repeatPreviousCommand": dummyCommandHandler,

// Cheatsheet commands
["cursorless.showCheatsheet"]: dummyCommandHandler,
["cursorless.internal.updateCheatsheetDefaults"]: dummyCommandHandler,
"cursorless.showCheatsheet": dummyCommandHandler,
"cursorless.internal.updateCheatsheetDefaults": dummyCommandHandler,

// Testcase recorder commands
["cursorless.recordTestCase"]: dummyCommandHandler,
["cursorless.recordOneTestCaseThenPause"]: dummyCommandHandler,
["cursorless.pauseRecording"]: dummyCommandHandler,
["cursorless.resumeRecording"]: dummyCommandHandler,
["cursorless.takeSnapshot"]: dummyCommandHandler,
"cursorless.recordTestCase": dummyCommandHandler,
"cursorless.recordOneTestCaseThenPause": dummyCommandHandler,
"cursorless.pauseRecording": dummyCommandHandler,
"cursorless.resumeRecording": dummyCommandHandler,
"cursorless.takeSnapshot": dummyCommandHandler,

// Scope test recorder commands
["cursorless.recordScopeTests.showUnimplementedFacets"]:
dummyCommandHandler,
["cursorless.recordScopeTests.saveActiveDocument"]: dummyCommandHandler,
"cursorless.recordScopeTests.showUnimplementedFacets": dummyCommandHandler,
"cursorless.recordScopeTests.saveActiveDocument": dummyCommandHandler,

// Other commands
["cursorless.showQuickPick"]: dummyCommandHandler,
["cursorless.showDocumentation"]: dummyCommandHandler,
["cursorless.showInstallationDependencies"]: dummyCommandHandler,
["cursorless.private.logQuickActions"]: dummyCommandHandler,
"cursorless.showQuickPick": dummyCommandHandler,
"cursorless.showDocumentation": dummyCommandHandler,
"cursorless.showInstallationDependencies": dummyCommandHandler,
"cursorless.private.logQuickActions": dummyCommandHandler,

// Hats
["cursorless.toggleDecorations"]: dummyCommandHandler,
["cursorless.recomputeDecorationStyles"]: dummyCommandHandler,
"cursorless.toggleDecorations": dummyCommandHandler,
"cursorless.recomputeDecorationStyles": dummyCommandHandler,

// Scope visualizer
["cursorless.showScopeVisualizer"]: dummyCommandHandler,
["cursorless.hideScopeVisualizer"]: dummyCommandHandler,
["cursorless.scopeVisualizer.openUrl"]: dummyCommandHandler,
"cursorless.showScopeVisualizer": dummyCommandHandler,
"cursorless.hideScopeVisualizer": dummyCommandHandler,
"cursorless.scopeVisualizer.openUrl": dummyCommandHandler,

// Command history
["cursorless.analyzeCommandHistory"]: dummyCommandHandler,
"cursorless.analyzeCommandHistory": dummyCommandHandler,

// General keyboard commands
["cursorless.keyboard.escape"]: dummyCommandHandler,
"cursorless.keyboard.escape": dummyCommandHandler,

// Targeted keyboard commands
["cursorless.keyboard.targeted.targetHat"]: dummyCommandHandler,
["cursorless.keyboard.targeted.targetScope"]: dummyCommandHandler,
["cursorless.keyboard.targeted.targetSelection"]: dummyCommandHandler,
["cursorless.keyboard.targeted.clearTarget"]: dummyCommandHandler,
["cursorless.keyboard.targeted.runActionOnTarget"]: dummyCommandHandler,
"cursorless.keyboard.targeted.targetHat": dummyCommandHandler,
"cursorless.keyboard.targeted.targetScope": dummyCommandHandler,
"cursorless.keyboard.targeted.targetSelection": dummyCommandHandler,
"cursorless.keyboard.targeted.clearTarget": dummyCommandHandler,
"cursorless.keyboard.targeted.runActionOnTarget": dummyCommandHandler,

// Modal keyboard commands
["cursorless.keyboard.modal.modeOn"]: dummyCommandHandler,
["cursorless.keyboard.modal.modeOff"]: dummyCommandHandler,
["cursorless.keyboard.modal.modeToggle"]: dummyCommandHandler,
["cursorless.keyboard.undoTarget"]: dummyCommandHandler,
["cursorless.keyboard.redoTarget"]: dummyCommandHandler,
"cursorless.keyboard.modal.modeOn": dummyCommandHandler,
"cursorless.keyboard.modal.modeOff": dummyCommandHandler,
"cursorless.keyboard.modal.modeToggle": dummyCommandHandler,
"cursorless.keyboard.undoTarget": dummyCommandHandler,
"cursorless.keyboard.redoTarget": dummyCommandHandler,

// Tutorial commands
["cursorless.tutorial.start"]: dummyCommandHandler,
["cursorless.tutorial.next"]: dummyCommandHandler,
["cursorless.tutorial.previous"]: dummyCommandHandler,
["cursorless.tutorial.restart"]: dummyCommandHandler,
["cursorless.tutorial.resume"]: dummyCommandHandler,
["cursorless.tutorial.list"]: dummyCommandHandler,
["cursorless.documentationOpened"]: dummyCommandHandler,
"cursorless.tutorial.start": dummyCommandHandler,
"cursorless.tutorial.next": dummyCommandHandler,
"cursorless.tutorial.previous": dummyCommandHandler,
"cursorless.tutorial.restart": dummyCommandHandler,
"cursorless.tutorial.resume": dummyCommandHandler,
"cursorless.tutorial.list": dummyCommandHandler,
"cursorless.documentationOpened": dummyCommandHandler,
};

Object.entries(commands).forEach(([commandId, callback]) =>
getNeovimRegistry().registerCommand(commandId, callback),
);
Object.entries(commands).forEach(([commandId, callback]) => {
getNeovimRegistry().registerCommand(commandId, callback);
});
}

export async function dummyCommandHandler(...args: any[]) {
export function dummyCommandHandler(...args: any[]) {
console.debug(`dummyCommandHandler(): args=${args}`);
}
Loading
Loading