Skip to content

Add oxlint plugin to @fedify/lint#760

Open
nyanrus wants to merge 4 commits into
fedify-dev:mainfrom
nyanrus:main
Open

Add oxlint plugin to @fedify/lint#760
nyanrus wants to merge 4 commits into
fedify-dev:mainfrom
nyanrus:main

Conversation

@nyanrus

@nyanrus nyanrus commented May 10, 2026

Copy link
Copy Markdown

fix #702

Expose the existing rule set through oxlint's JS plugin API at the new @fedify/lint/oxlint subpath export. The same rules used by the ESLint plugin are reused verbatim — oxlint claims an ESLint-compatible API, so no rule logic is duplicated.

Includes an integration test that spawns the oxlint binary against a tmpdir fixture, plus an example project under examples/lint/oxlint/ that demonstrates the configuration with both a violating and a corrected fixture.

edit:
Deno support added!

@coderabbitai

coderabbitai Bot commented May 10, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds an Oxlint subpath export and plugin implementation for @fedify/lint, including documentation, examples, integration tests, and workspace/build config updates to publish and test the Oxlint plugin.

Changes

Oxlint Support Implementation

Layer / File(s) Summary
Package export & build entry
packages/lint/package.json, packages/lint/tsdown.config.ts, packages/lint/deno.json
Adds ./oxlint subpath exports, extends keywords/devDependencies with oxlint, and adds src/oxlint.ts as a build entry; expands deno test permissions.
Oxlint plugin implementation
packages/lint/src/oxlint.ts
Implements and exports an Oxlint-compatible plugin object (meta + rules) and default export.
Integration tests
packages/lint/src/tests/oxlint.test.ts
Runs oxlint against a temp fixture to assert Fedify lint diagnostics (skips if oxlint or built plugin missing).
Public documentation
packages/lint/README.md, docs/manual/lint.md
Documents Oxlint support, shows .oxlintrc.json examples with jsPlugins, and details running Oxlint via scripts and direct CLI.
Examples
examples/lint/oxlint/*
Adds example project with package.json, .oxlintrc.json, federation.ts (bad), federation.fixed.ts (fixed), and README describing usage and expected diagnostics.
Workspace & tooling config
pnpm-workspace.yaml, .hongdown.toml
Adds oxlint to the version catalog, updates workspace package list, and registers "Oxlint" as a proper noun for docs tooling.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested labels

type/feature, type/documentation, examples, dependencies

Suggested reviewers

  • 2chanhaeng
  • dahlia
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Add oxlint plugin to @fedify/lint' clearly and concisely describes the main change—adding oxlint support to the lint package with a new plugin export.
Description check ✅ Passed The description relates to the changeset by explaining the oxlint plugin implementation, integration test, example project, and Deno support additions, matching the file changes presented.
Linked Issues check ✅ Passed The PR fulfills all coding requirements from issue #702: adds @fedify/lint/oxlint subpath export, reuses ESLint rules, includes integration tests, provides example configuration, documents in README, preserves root exports, and notes alpha status.
Out of Scope Changes check ✅ Passed All changes are in scope: oxlint plugin implementation, documentation updates, tests, examples, build config, workspace config, and tooling (hongdown.toml) updates directly support the oxlint support feature.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@examples/lint/oxlint/README.md`:
- Around line 6-8: Add a short stability caveat to the README.md's intro
paragraph explaining that Oxlint's JavaScript plugin support is currently
upstream alpha; update the opening lines where the example is described (the
paragraph referencing `@fedify/lint` and [oxlint]) to append a single-sentence
note like "Note: Oxlint's JS plugin support is upstream alpha and may be
unstable" so users are aware of adoption risk.

In `@packages/lint/src/tests/oxlint.test.ts`:
- Line 17: The test import uses the Node-only harness; replace the
runtime-specific import by importing the test harness from the repo-standard
package. Update the import statement that currently reads importing "test"
(symbol: test) from "node:test" to import "test" from "@fedify/fixture" so this
file (oxlint.test.ts) uses the repository-standard, runtime-agnostic test
harness.
- Around line 75-120: Wrap the temporary-dir usage in the test in a try/finally:
create dir with mkdtempSync as now, run the test logic (writes, spawnSync,
assertions) inside try, and in finally call rmSync(dir, { recursive: true,
force: true }) to always remove the fixture. If rmSync is not imported, add it
from 'fs' (or call fs.rmSync) so the cleanup compiles; reference the local
variable dir in the finally block and keep the existing assertions and error
handling unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: b56fc3b9-8fb2-468b-b50d-f1ec0a5eccb9

📥 Commits

Reviewing files that changed from the base of the PR and between 7415710 and 14f5ce4.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (12)
  • docs/manual/lint.md
  • examples/lint/oxlint/.oxlintrc.json
  • examples/lint/oxlint/README.md
  • examples/lint/oxlint/federation.fixed.ts
  • examples/lint/oxlint/federation.ts
  • examples/lint/oxlint/package.json
  • packages/lint/README.md
  • packages/lint/package.json
  • packages/lint/src/oxlint.ts
  • packages/lint/src/tests/oxlint.test.ts
  • packages/lint/tsdown.config.ts
  • pnpm-workspace.yaml

Comment thread examples/lint/oxlint/README.md Outdated
Comment thread packages/lint/src/tests/oxlint.test.ts Outdated
Comment thread packages/lint/src/tests/oxlint.test.ts Outdated

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces support for oxlint, a fast Rust-based linter, to the @fedify/lint package. It adds a new subpath export, @fedify/lint/oxlint, which exposes the existing Fedify lint rules in a format compatible with oxlint's JS plugin API. The changes include comprehensive documentation updates, a new example project demonstrating oxlint integration, and an integration test suite. Feedback from the reviewer identifies a documentation issue where a JSON code block containing comments should be labeled as jsonc to ensure syntactic correctness.

Comment thread packages/lint/README.md Outdated

@dahlia dahlia left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left several nitpicking comments. I guess @2chanhaeng, the original author of @fedify/lint, could give you more helpful feedback.

Comment thread docs/manual/lint.md Outdated
Comment thread docs/manual/lint.md Outdated
Comment thread docs/manual/lint.md Outdated
Comment thread docs/manual/lint.md Outdated
Comment thread docs/manual/lint.md Outdated
Comment thread docs/manual/lint.md Outdated
Comment thread docs/manual/lint.md Outdated
Comment thread docs/manual/lint.md Outdated
Comment thread docs/manual/lint.md Outdated
@dahlia dahlia requested a review from 2chanhaeng May 10, 2026 12:53
@codecov

codecov Bot commented May 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.
see 76 files with indirect coverage changes

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
packages/lint/src/tests/oxlint.test.ts (1)

72-121: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Clean up the temporary fixture directory after the test.

The test creates a temp directory at line 76 but never removes it, which will accumulate temp directories in local dev and CI environments over time.

🧹 Suggested cleanup patch
-import { existsSync, mkdtempSync, writeFileSync } from "node:fs";
+import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
   () => {
     const dir = mkdtempSync(join(tmpdir(), "fedify-lint-oxlint-"));
-    writeFileSync(
-      join(dir, ".oxlintrc.json"),
-      JSON.stringify({
-        jsPlugins: [pluginPath],
-        rules: {
-          "@fedify/lint/actor-id-required": "error",
-        },
-      }),
-    );
-    writeFileSync(join(dir, "federation.ts"), BAD_CODE);
-
-    const result = spawnSync(
-      oxlintBin!,
-      ["--format=json", "."],
-      { cwd: dir, encoding: "utf8" },
-    );
-
-    ok(
-      result.status !== 0,
-      `Expected non-zero exit, got ${result.status}. stderr: ${result.stderr}`,
-    );
-
-    let payload: OxlintJsonReport;
-    try {
-      payload = JSON.parse(result.stdout) as OxlintJsonReport;
-    } catch (err) {
-      throw new Error(
-        `Failed to parse oxlint JSON output: ${(err as Error).message}\n` +
-          `stdout: ${result.stdout}\nstderr: ${result.stderr}`,
-      );
-    }
-
-    const codes = (payload.diagnostics ?? []).map((d) => d.code ?? "");
-    const matched = codes.some((code) =>
-      code === "@fedify/lint(actor-id-required)" ||
-      code.includes("actor-id-required")
-    );
-    ok(
-      matched,
-      `Expected `@fedify/lint`(actor-id-required) diagnostic, got: ${
-        codes.join(", ") || "(none)"
-      }`,
-    );
+    try {
+      writeFileSync(
+        join(dir, ".oxlintrc.json"),
+        JSON.stringify({
+          jsPlugins: [pluginPath],
+          rules: {
+            "@fedify/lint/actor-id-required": "error",
+          },
+        }),
+      );
+      writeFileSync(join(dir, "federation.ts"), BAD_CODE);
+
+      const result = spawnSync(
+        oxlintBin!,
+        ["--format=json", "."],
+        { cwd: dir, encoding: "utf8" },
+      );
+
+      ok(
+        result.status !== 0,
+        `Expected non-zero exit, got ${result.status}. stderr: ${result.stderr}`,
+      );
+
+      let payload: OxlintJsonReport;
+      try {
+        payload = JSON.parse(result.stdout) as OxlintJsonReport;
+      } catch (err) {
+        throw new Error(
+          `Failed to parse oxlint JSON output: ${(err as Error).message}\n` +
+            `stdout: ${result.stdout}\nstderr: ${result.stderr}`,
+        );
+      }
+
+      const codes = (payload.diagnostics ?? []).map((d) => d.code ?? "");
+      const matched = codes.some((code) =>
+        code === "@fedify/lint(actor-id-required)" ||
+        code.includes("actor-id-required")
+      );
+      ok(
+        matched,
+        `Expected `@fedify/lint`(actor-id-required) diagnostic, got: ${
+          codes.join(", ") || "(none)"
+        }`,
+      );
+    } finally {
+      rmSync(dir, { recursive: true, force: true });
+    }
   },
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/lint/src/tests/oxlint.test.ts` around lines 72 - 121, The test
creates a temporary directory in the local variable "dir" via mkdtempSync but
never removes it; wrap the test body in a try/finally (or add a teardown) and
remove the temp directory in the finally block using fs.rmSync(dir, { recursive:
true, force: true }) (or equivalent cleanup) to ensure the directory created by
mkdtempSync is always deleted after the test (keep references to the existing
symbols: mkdtempSync, dir, writeFileSync, spawnSync, and the test named "oxlint
plugin: actor-id-required fires on missing id").
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@packages/lint/src/tests/oxlint.test.ts`:
- Around line 72-121: The test creates a temporary directory in the local
variable "dir" via mkdtempSync but never removes it; wrap the test body in a
try/finally (or add a teardown) and remove the temp directory in the finally
block using fs.rmSync(dir, { recursive: true, force: true }) (or equivalent
cleanup) to ensure the directory created by mkdtempSync is always deleted after
the test (keep references to the existing symbols: mkdtempSync, dir,
writeFileSync, spawnSync, and the test named "oxlint plugin: actor-id-required
fires on missing id").

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 3e7360ef-6edd-4b6d-8e68-5eaba546c321

📥 Commits

Reviewing files that changed from the base of the PR and between 14f5ce4 and 50be486.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (7)
  • .hongdown.toml
  • docs/manual/lint.md
  • examples/lint/oxlint/README.md
  • packages/lint/README.md
  • packages/lint/deno.json
  • packages/lint/package.json
  • packages/lint/src/tests/oxlint.test.ts

nyanrus added a commit to nyanrus/fedify that referenced this pull request May 10, 2026
Two review points on packages/lint/src/tests/oxlint.test.ts:

  -  Make the runtime story explicit. The test imports `node:*` modules
     and spawns the oxlint binary, which is unusual for this package
     compared with the in-process Deno.lint / ESLint Linter tests. The
     header comment now spells out that Deno's node compat layer is what
     keeps the same source running under both `pnpm test` and
     `deno task test`, that subprocess-spawning is intentional (oxlint
     is a Rust binary), and that the binary plus the built loader are
     ignore-skip preconditions.

  -  Clean up the temp fixture directory. Wrap the test body in
     `try/finally` so `rmSync(dir, { recursive: true, force: true })`
     runs whether the assertions pass or throw. Avoids local/CI temp
     buildup.

Refs: fedify-dev#760

Assisted-by: Claude Code:claude-opus-4-7

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/manual/lint.md`:
- Line 318: Remove the unused reference-style link definition "[Rules]: `#rules`"
from docs/manual/lint.md; locate the literal "[Rules]: `#rules`" (the reference
link definition) and delete that line since the page already uses an inline
anchor "( *Rules* section](`#rules`)" and the reference is unused.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: dedc1a61-f7cd-4198-ad44-257bc24cc719

📥 Commits

Reviewing files that changed from the base of the PR and between de2b2ba and f1c8be9.

📒 Files selected for processing (1)
  • docs/manual/lint.md

Comment thread docs/manual/lint.md Outdated

@2chanhaeng 2chanhaeng left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for contributions! I'm really sorry about late for review.

Would you add "oxlint" to *cspell.json" in root?
And if the Oxlint plugin supports Deno, would you add deno.json to the oxlint examples?

While the review was delayed, there was a minor update for oxlint. I'm truly sorry for the late review, again, but could you also update that package version to the latest? Thank you once again for your contribution!

Comment thread packages/lint/src/tests/oxlint.test.ts Outdated
Comment thread packages/lint/src/tests/oxlint.test.ts Outdated
Comment thread packages/lint/src/oxlint.ts Outdated
Comment thread packages/lint/src/oxlint.ts Outdated
Comment thread packages/lint/deno.json
nyanrus added a commit to nyanrus/fedify that referenced this pull request May 24, 2026
Per fedify-dev#760 (review):

 -  Bump the pnpm catalog `oxlint` entry from ^1.63.0 to ^1.66.0 so the
    example and the lint package's dev dependency pick up the upstream
    fixes that landed while review was in flight.
 -  Add `oxlint` to *cspell.json* so the spell checker stops flagging
    it in docs and READMEs.
 -  Add *examples/lint/oxlint/deno.json* (and register it in the root
    Deno workspace) so the example can also be run with `deno task
    lint` / `deno task lint:fixed`. Oxlint is a Rust binary distributed
    via npm, and Deno's npm shim runs it just fine; the JS plugin is
    still resolved out of *node_modules*, so `pnpm install` remains a
    prerequisite, which the README now mentions.

Assisted-by: Claude Code:claude-opus-4-7
nyanrus added a commit to nyanrus/fedify that referenced this pull request May 24, 2026
Picks up the nitpicks left on
fedify-dev#760 that hadn't been folded
in yet:

 -  *packages/lint/src/oxlint.ts*: stop exporting `OxlintPlugin`. The
    interface only exists to type-annotate the default export and
    isn't meant for downstream import — keeping it private avoids
    drift from upstream Oxlint's `Plugin` definition in
    `@oxlint/plugins`. Also drops the redundant named `plugin` export
    so the file has a single default export, which is the shape
    Oxlint's JS plugin loader looks for.
 -  *packages/lint/src/tests/oxlint.test.ts*: when the integration
    test is skipped because the built loader or the oxlint binary is
    missing, print a concrete remediation (`mise run install` or
    `pnpm install && pnpm --filter @fedify/lint build`) instead of
    silently ignoring it.
 -  *cspell.json*: add `oxlintrc` (used in the README and test
    fixture filename) alongside the previously-added `oxlint`.
 -  *packages/lint/deno.json*: map `oxlint` to `npm:oxlint@^1.66.0`
    in `imports`, mirroring how the example's *deno.json* already
    pulls Oxlint through Deno's npm shim.

Assisted-by: Claude Code:claude-opus-4-7
@nyanrus nyanrus requested a review from 2chanhaeng May 24, 2026 06:13

@2chanhaeng 2chanhaeng left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your contributions, again!
Sorry for late. I've been sick for the past few days and still haven't fully recovered, so my review is late. I should have at least let you know. I apologize if you've been waiting a long time.
Before getting into the review, I recommend that in the future, you leave a comment on the review explaining how you applied the feedback along with the relevant commit hash if you accepted it, or the reasoning behind your decision if you dismissed it. This will help the reviewer review your revisions more quickly.

Comment thread packages/lint/src/tests/oxlint.test.ts Outdated
Comment thread packages/lint/src/tests/oxlint.test.ts
Comment thread examples/lint/oxlint/README.md
@2chanhaeng 2chanhaeng self-requested a review May 30, 2026 10:51

@2chanhaeng 2chanhaeng left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your awesome contributions! The code is almost complete. If there are no major issues, this will likely be my final review before approval. First, please add prepare as a dependency to the tasks."test:examples" entry in mise.toml.

 [tasks."test:examples"]
 description = "Run tests for all example projects"
+ depends = ["prepare"]
 run = "deno run -A examples/test-examples/mod.ts"

test:examples runs with Deno, and as you know, using Oxlint with Deno requires generating the Oxlint binary through a build process. It would be even better to create and add a separate task specifically for generating the Oxlint binary, but I am hesitant to ask because I am not sure how complex that might be. Please look into it and consider implementing it that way if you can.
Secondly, before merging, you need to organize the commit logs using git rebase to make them ready for merging. If you ask @daliah for help with the process, I am sure they will be happy to assist. I would love to help you myself, but @daliah knows much more than I do, whereas I am just barely following along with help from LLM agents. 😂
Anyway, thanks again. I hope this is my last review. See ya!

Comment thread packages/lint/src/tests/integration.test.ts
@dahlia

dahlia commented Jun 22, 2026

Copy link
Copy Markdown
Member

This pull request has some conflicts; could you resolve them?

@netlify

netlify Bot commented Jun 23, 2026

Copy link
Copy Markdown

Deploy Preview for fedify-json-schema ready!

Name Link
🔨 Latest commit 793d663
🔍 Latest deploy log https://app.netlify.com/projects/fedify-json-schema/deploys/6a3a12c376787700092f9de3
😎 Deploy Preview https://deploy-preview-760--fedify-json-schema.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

nyanrus and others added 4 commits June 23, 2026 13:58
Oxlint's JS plugin API can host the same rule set as the ESLint plugin,
so projects that lint with oxlint can catch the same Fedify federation
mistakes.  This exposes the rules in oxlint's plugin shape under a new
`@fedify/lint/oxlint` subpath export, configured via `.oxlintrc.json`'s
`jsPlugins` field.

Note that oxlint's JS plugin support is upstream alpha and may be
unstable.

Co-authored-by: Hong Minhee (洪 民憙) <hong@minhee.org>
Assisted-by: Claude Code:claude-opus-4-8
Demonstrate the plugin end-to-end: federation.ts intentionally violates
several rules (missing id, inbox, outbox, followers) while
federation.fixed.ts passes them all.

Register the example in the test runner so that `mise run test:examples`
verifies the fixed fixture lints clean and the violating fixture fails.

Assisted-by: Claude Code:claude-opus-4-8
oxlint is a Rust binary, so the only way to exercise the JS plugin
loader is to spawn it as a subprocess against a real config file.  Two
lanes do this:

- oxlint.test.ts asserts actor-id-required fires on a missing id.
- integration.test.ts runs the whole rule suite through oxlint as an
  additional lane, so every rule is also checked through the oxlint
  adapter.

The shared setup — locating the binary, the skip precondition (built
loader plus binary), the tmpdir fixture, and the JSON parsing — lives
in lib/oxlint.ts so both lanes reuse it.  When the loader or the binary
is missing, the oxlint lanes are skipped with a warning.

Assisted-by: Claude Code:claude-opus-4-8
The lint/oxlint example needs two things the runner cannot produce on
its own: @fedify/lint's built dist/oxlint.js loader and the oxlint
binary in node_modules.  `prepare` provides both — it builds the loader
via build:self and, through its install dependency, provisions the
prebuilt oxlint binary — so depend on it.

Assisted-by: Claude Code:claude-opus-4-8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add official Oxlint support to @fedify/lint

3 participants