Skip to content

Commit 4bc8e38

Browse files
authored
Merge pull request #139 from solidjs-community/feature/expose-flat-configs-from-root
Expose flat configs from package root as .configs['flat/*'].
2 parents db48411 + dcf1256 commit 4bc8e38

File tree

4 files changed

+35
-4
lines changed

4 files changed

+35
-4
lines changed

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ For TypeScript:
133133

134134
```js
135135
import js from "@eslint/js";
136-
import solid from 'eslint-plugin-solid/configs/typescript';
136+
import solid from "eslint-plugin-solid/configs/typescript";
137137
import * as tsParser from "@typescript-eslint/parser";
138138

139139
export default [
@@ -144,11 +144,11 @@ export default [
144144
languageOptions: {
145145
parser: tsParser,
146146
parserOptions: {
147-
project: 'tsconfig.json',
147+
project: "tsconfig.json",
148148
},
149149
},
150150
},
151-
]
151+
];
152152
```
153153

154154
These configurations do not configure global variables in ESLint. You can do this yourself manually
@@ -159,6 +159,8 @@ as well as at least ES2015.
159159
Note for the ESLint VSCode Extension: Enable the "Use Flat Config" setting for your workspace to
160160
enable Flat Config support.
161161

162+
Flat configs are also available as `plugin.configs['flat/recommended']` and `plugin.configs['flat/typescript']`, after using `import plugin from 'eslint-plugin-solid'`.
163+
162164
## Rules
163165

164166
✔: Enabled in the `recommended` configuration.

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ const pluginLegacy = {
3333
},
3434
rules: typescriptConfig.rules,
3535
},
36+
"flat/recommended": recommendedConfig,
37+
"flat/typescript": typescriptConfig,
3638
},
3739
};
3840

src/plugin.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ import styleProp from "./rules/style-prop";
2828
import noArrayHandlers from "./rules/no-array-handlers";
2929
// import validateJsxNesting from "./rules/validate-jsx-nesting";
3030

31+
// Use require() so that `package.json` doesn't get copied to `dist`
32+
// eslint-disable-next-line @typescript-eslint/no-var-requires
33+
const { name, version } = require("../package.json");
34+
const meta = { name, version };
35+
3136
const allRules = {
3237
"components-return-once": componentsReturnOnce,
3338
"event-handlers": eventHandlers,
@@ -52,4 +57,4 @@ const allRules = {
5257
// "validate-jsx-nesting": validateJsxNesting
5358
};
5459

55-
export const plugin = { rules: allRules };
60+
export const plugin = { meta, rules: allRules };

test/fixture.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { FlatESLint } from "eslint/use-at-your-own-risk";
66
import * as tsParser from "@typescript-eslint/parser";
77
import recommendedConfig from "eslint-plugin-solid/configs/recommended";
88
import typescriptConfig from "eslint-plugin-solid/configs/typescript";
9+
import plugin from "eslint-plugin-solid";
910

1011
const cwd = path.resolve("test", "fixture");
1112
const validDir = path.join(cwd, "valid");
@@ -66,3 +67,24 @@ test.concurrent("fixture (flat)", async () => {
6667

6768
expect(results.filter((result) => result.filePath === jsxUndefPath).length).toBe(1);
6869
});
70+
71+
describe("config format", () => {
72+
test("flat config has meta", () => {
73+
expect(recommendedConfig.plugins.solid.meta.name).toBe("eslint-plugin-solid");
74+
expect(recommendedConfig.plugins.solid.meta.version).toEqual(expect.any(String));
75+
expect(typescriptConfig.plugins.solid.meta.name).toBe("eslint-plugin-solid");
76+
expect(typescriptConfig.plugins.solid.meta.version).toEqual(expect.any(String));
77+
});
78+
79+
test('flat configs are also exposed on plugin.configs["flat/*"]', () => {
80+
// include flat configs on legacy config object with `flat/` prefix. The `fixture (flat)` test
81+
// passing means that an equivalent config using `configs["flat/*"]` will also pass.
82+
expect(plugin.configs["flat/recommended"]).toBe(recommendedConfig);
83+
expect(plugin.configs["flat/typescript"]).toBe(typescriptConfig);
84+
});
85+
86+
test("legacy configs use strings, not modules", () => {
87+
expect(plugin.configs.recommended.plugins).toStrictEqual(["solid"]);
88+
expect(plugin.configs.typescript.plugins).toStrictEqual(["solid"]);
89+
});
90+
});

0 commit comments

Comments
 (0)