no-use-base-url-for-internal-link-components
Disallow wrapping internal @docusaurus/Link destinations with useBaseUrl(...).
Targeted pattern scopeโ
This rule focuses on JSX/TSX files that import:
- the default export from
@docusaurus/Link - the default export from
@docusaurus/useBaseUrl
It targets internal Link destinations such as:
to={useBaseUrl("/docs/intro")}href={useBaseUrl("/docs/rules/overview")}
What this rule reportsโ
This rule reports internal @docusaurus/Link destinations that are unnecessarily wrapped with useBaseUrl(...).
Why this rule existsโ
The Docusaurus client API docs explicitly warn against using useBaseUrl for regular links.
For internal @docusaurus/Link destinations, Docusaurus already handles baseUrl logic for you. Keeping the wrapper around those routes:
- adds unnecessary indirection
- makes internal routing code noisier
- can hide the fact that
Linkalready knows how to resolve site-relative routes
โ Incorrectโ
import Link from "@docusaurus/Link";
import useBaseUrl from "@docusaurus/useBaseUrl";
export default function HomePage() {
return <Link to={useBaseUrl("/docs/intro")}>Docs</Link>;
}
โ Correctโ
import Link from "@docusaurus/Link";
import useBaseUrl from "@docusaurus/useBaseUrl";
export default function HomePage() {
return <Link to="/docs/intro">Docs</Link>;
}
Behavior and migration notesโ
This rule provides an autofix for the simple internal-route cases it can prove.
It can also normalize this common mistake:
href={useBaseUrl("/docs/...")}โto="/docs/..."
Additional examplesโ
โ Incorrect โ internal route on hrefโ
import DocsLink from "@docusaurus/Link";
import baseUrlFor from "@docusaurus/useBaseUrl";
export default function Hero() {
return <DocsLink href={baseUrlFor("/docs/rules/overview")}>Rules</DocsLink>;
}
โ Correct โ external URLs are ignoredโ
import Link from "@docusaurus/Link";
import useBaseUrl from "@docusaurus/useBaseUrl";
export default function Hero() {
return <Link href={useBaseUrl("https://example.com/logo.png")}>External</Link>;
}
ESLint flat config exampleโ
import docusaurus2 from "eslint-plugin-docusaurus-2";
export default [docusaurus2.configs.recommended];
When not to use itโ
Do not use this rule if your project intentionally keeps useBaseUrl(...) wrappers on internal @docusaurus/Link destinations and you do not want linting to normalize them away.
Rule catalog ID: R019