Update
This commit is contained in:
38
src/commits.json
Normal file
38
src/commits.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"eslint-plugin-import": {
|
||||
"hash": "f77ceb679d59ced5d9a633123385470a9eea10d9",
|
||||
"date": "2024-04-07T12:55:28+12:00",
|
||||
"committer": "Jordan Harband",
|
||||
"subject": "[actions] cancel in-progress runs on PR updates"
|
||||
},
|
||||
"eslint-import-resolver-typescript": {
|
||||
"hash": "7a02ac08b5aaac8c217f0e87142f97eafcc38fbc",
|
||||
"date": "2024-04-01T01:06:20+00:00",
|
||||
"committer": "GitHub",
|
||||
"subject": "chore(deps): update dependency npm-run-all2 to ^5.0.2 (#277)"
|
||||
},
|
||||
"eslint-plugin-jsx-a11y": {
|
||||
"hash": "0d5321a5457c5f0da0ca216053cc5b4f571b53ae",
|
||||
"date": "2024-01-27T22:18:19-08:00",
|
||||
"committer": "Jordan Harband",
|
||||
"subject": "[Deps] update `@babel/runtime`, `safe-regex-test`"
|
||||
},
|
||||
"eslint-plugin-n": {
|
||||
"hash": "8d711f5446655c9874aeffb2ef28b3c4d8463fb6",
|
||||
"date": "2024-04-16T16:08:04+08:00",
|
||||
"committer": "GitHub",
|
||||
"subject": "chore: update outdated funding (#246)"
|
||||
},
|
||||
"eslint-plugin-react": {
|
||||
"hash": "4467db503e38b9356517cf6926d11be544ccf4b1",
|
||||
"date": "2024-03-16T12:54:58+09:00",
|
||||
"committer": "Jordan Harband",
|
||||
"subject": "[Fix] `boolean-prop-naming`: avoid a crash with a non-TSTypeReference type"
|
||||
},
|
||||
"jsx-ast-utils": {
|
||||
"hash": "5943318eaf23764eec3ff397ebb969613d728a95",
|
||||
"date": "2023-07-28T18:34:04-07:00",
|
||||
"committer": "Jordan Harband",
|
||||
"subject": "v3.3.5"
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/// <reference path="./types.d.ts" />
|
||||
/// <reference path="./modules.d.ts" />
|
||||
import './redirect';
|
||||
import fs from 'node:fs';
|
||||
import type { Rule } from 'eslint';
|
||||
|
@ -30,9 +30,10 @@ const plugin: ESLint.Plugin = {
|
||||
};
|
||||
|
||||
for (const file of files) {
|
||||
const name = basename(file, extname(file));
|
||||
const module = require(resolve(folders, file));
|
||||
plugin.rules![name] = module.default ?? module;
|
||||
const unwrap = module.default ?? module;
|
||||
const name = unwrap.name ?? basename(file, extname(file));
|
||||
plugin.rules![name] = unwrap;
|
||||
}
|
||||
|
||||
export = plugin;
|
||||
|
15
src/types.d.ts → src/modules.d.ts
vendored
15
src/types.d.ts → src/modules.d.ts
vendored
@ -19,3 +19,18 @@ declare module '@typescript-eslint/scope-manager' {
|
||||
declare module '@typescript-eslint/types' {
|
||||
export * from '@typescript-eslint/types/dist/index';
|
||||
}
|
||||
|
||||
declare module 'module' {
|
||||
export function _resolveFilename(
|
||||
request: string,
|
||||
parent: {
|
||||
/**
|
||||
* Can be null if the parent id is 'internal/preload' (e.g. via --require)
|
||||
* which doesn't have a file path.
|
||||
*/
|
||||
filename: string | null;
|
||||
},
|
||||
isMain: boolean,
|
||||
options?: Record<PropertyKey, unknown>,
|
||||
): string;
|
||||
}
|
37
src/prettier.ts
Normal file
37
src/prettier.ts
Normal file
@ -0,0 +1,37 @@
|
||||
import type { Config } from 'prettier';
|
||||
|
||||
const prettier: Config = {
|
||||
arrowParens: 'avoid',
|
||||
tabWidth: 2,
|
||||
printWidth: 90,
|
||||
semi: true,
|
||||
singleQuote: true,
|
||||
trailingComma: 'all',
|
||||
plugins: [],
|
||||
};
|
||||
|
||||
export default function defineConfig({
|
||||
tailwind,
|
||||
...config
|
||||
}: Partial<Config> & {
|
||||
tailwind?: boolean;
|
||||
}) {
|
||||
const result: Config = {
|
||||
...prettier,
|
||||
...config,
|
||||
};
|
||||
|
||||
if (tailwind) {
|
||||
ensureHas(result.plugins!, 'prettier-plugin-tailwindcss');
|
||||
result.tailwindAttributes ??= ['css'];
|
||||
result.tailwindFunctions ??= ['tw'];
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function ensureHas<T>(list: T[], item: T) {
|
||||
if (!list.includes(item)) {
|
||||
list.push(item);
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
import Module from 'module';
|
||||
const { name } = [require][0]('./package.json');
|
||||
|
||||
const _resolveFilename = (Module as any)._resolveFilename;
|
||||
const _resolveFilename = Module._resolveFilename;
|
||||
const alias = new Set([
|
||||
'eslint-import-resolver-typescript',
|
||||
'eslint-plugin-import',
|
||||
@ -13,9 +13,14 @@ const alias = new Set([
|
||||
'eslint-plugin-rules',
|
||||
]);
|
||||
|
||||
(Module as any)._resolveFilename = function (module: string, ...args: any[]) {
|
||||
if (alias.has(module)) {
|
||||
module = `${name}/${module}`;
|
||||
type CDR<T> = T extends [any, ...infer R] ? R : [];
|
||||
|
||||
Module._resolveFilename = function (
|
||||
request: string,
|
||||
...args: CDR<Parameters<typeof _resolveFilename>>
|
||||
) {
|
||||
if (alias.has(request)) {
|
||||
request = `${name}/${request}`;
|
||||
}
|
||||
return _resolveFilename(module, ...args);
|
||||
return _resolveFilename(request, ...args);
|
||||
};
|
||||
|
@ -1,16 +1,15 @@
|
||||
import type { Rule } from 'eslint';
|
||||
import { defineRule } from '../types';
|
||||
|
||||
const rule: Rule.RuleModule = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description:
|
||||
'Ban assignment of empty object literals `{}` and replace them with `Object.create(null)`',
|
||||
category: 'Best Practices',
|
||||
recommended: true,
|
||||
},
|
||||
fixable: 'code',
|
||||
export default defineRule({
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description:
|
||||
'Ban assignment of empty object literals `{}` and replace them with `Object.create(null)`',
|
||||
category: 'Best Practices',
|
||||
recommended: true,
|
||||
},
|
||||
fixable: 'code',
|
||||
|
||||
create: context => ({
|
||||
AssignmentExpression(node) {
|
||||
if (
|
||||
@ -27,6 +26,4 @@ const rule: Rule.RuleModule = {
|
||||
}
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
||||
export default rule;
|
||||
});
|
||||
|
26
src/types.ts
Normal file
26
src/types.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import type { Rule } from 'eslint';
|
||||
import type { ESLintUtils } from '@typescript-eslint/utils';
|
||||
|
||||
export function defineRules(rules: {
|
||||
[ruleName: string]: Rule.RuleModule | ESLintUtils.RuleModule<string, unknown[]>;
|
||||
}) {
|
||||
return rules;
|
||||
}
|
||||
|
||||
export function defineRule({
|
||||
name,
|
||||
create,
|
||||
...meta
|
||||
}: Rule.RuleMetaData & {
|
||||
name?: string;
|
||||
create: (context: Rule.RuleContext) => Rule.RuleListener;
|
||||
}): Rule.RuleModule {
|
||||
const module: Rule.RuleModule = {
|
||||
meta,
|
||||
create,
|
||||
};
|
||||
if (name != null) {
|
||||
Object.defineProperty(module, 'name', { value: name });
|
||||
}
|
||||
return module;
|
||||
}
|
Reference in New Issue
Block a user