From b517ed8a52ce38eba14a66a3550bc67f691a56f2 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Mon, 8 May 2023 19:51:02 +0900 Subject: [PATCH 1/5] feat: export meta object --- package.json | 3 ++- src/configs/base.ts | 3 +++ src/configs/prettier.ts | 3 +++ src/configs/recommended.ts | 3 +++ src/index.ts | 2 ++ src/meta.ts | 5 +++++ src/processor/index.ts | 1 + tests/src/meta.ts | 19 +++++++++++++++++ tools/update-meta.ts | 38 ++++++++++++++++++++++++++++++++++ tools/update-rules.ts | 6 +++++- tools/update-rulesets.ts | 21 ++++++++++++++++--- tools/update-types-for-node.ts | 7 ++++++- tools/update.ts | 1 + tsconfig.json | 3 ++- 14 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 src/meta.ts create mode 100644 tests/src/meta.ts create mode 100644 tools/update-meta.ts diff --git a/package.json b/package.json index c01f8f28b..546045945 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ "sveltejs" ], "scripts": { - "build": "yarn build:ts", + "build": "yarn build:meta && yarn build:tsc", + "build:meta": "yarn ts ./tools/update-meta.ts", "build:ts": "tsc --project ./tsconfig.build.json", "clean": "rimraf .nyc_output lib coverage build .svelte-kit svelte.config-dist.js", "cover": "nyc --reporter=lcov yarn test", diff --git a/src/configs/base.ts b/src/configs/base.ts index 450d6bca5..5ae2bd98b 100644 --- a/src/configs/base.ts +++ b/src/configs/base.ts @@ -1,3 +1,6 @@ +// IMPORTANT! +// This file has been automatically generated, +// in order to update its content execute "yarn update" export = { plugins: ["svelte"], overrides: [ diff --git a/src/configs/prettier.ts b/src/configs/prettier.ts index f33faf067..e365aba93 100644 --- a/src/configs/prettier.ts +++ b/src/configs/prettier.ts @@ -1,3 +1,6 @@ +// IMPORTANT! +// This file has been automatically generated, +// in order to update its content execute "yarn update" import path from "path" const base = require.resolve("./base") const baseExtend = diff --git a/src/configs/recommended.ts b/src/configs/recommended.ts index b513c4b65..687f43288 100644 --- a/src/configs/recommended.ts +++ b/src/configs/recommended.ts @@ -1,3 +1,6 @@ +// IMPORTANT! +// This file has been automatically generated, +// in order to update its content execute "yarn update" import path from "path" const base = require.resolve("./base") const baseExtend = diff --git a/src/index.ts b/src/index.ts index 774ad68f5..af6eee207 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ import recommended from "./configs/recommended" import prettier from "./configs/prettier" import all from "./configs/all" import * as processor from "./processor" +import * as meta from "./meta" const configs = { base, @@ -19,6 +20,7 @@ const rules = ruleList.reduce((obj, r) => { }, {} as { [key: string]: RuleModule }) export = { + meta, configs, rules, processors: { diff --git a/src/meta.ts b/src/meta.ts new file mode 100644 index 000000000..ba1a7b0ed --- /dev/null +++ b/src/meta.ts @@ -0,0 +1,5 @@ +// IMPORTANT! +// This file has been automatically generated, +// in order to update its content execute "yarn update" +export const name = "eslint-plugin-svelte" as const +export const version = "2.27.4" as const diff --git a/src/processor/index.ts b/src/processor/index.ts index 54ec71483..931bf69d0 100644 --- a/src/processor/index.ts +++ b/src/processor/index.ts @@ -1,6 +1,7 @@ import type { Linter } from "eslint" import type { Shared } from "../shared" import { beginShared, terminateShared } from "../shared" +export * as meta from "../meta" /** preprocess */ export function preprocess(code: string, filename: string): string[] { diff --git a/tests/src/meta.ts b/tests/src/meta.ts new file mode 100644 index 000000000..79023dd5d --- /dev/null +++ b/tests/src/meta.ts @@ -0,0 +1,19 @@ +import assert from "assert" +import plugin from "../../src" +import { version } from "../../package.json" +const expectedMeta = { + name: "eslint-plugin-svelte", + version, +} + +describe("Test for meta object", () => { + it("A plugin should have a meta object.", () => { + assert.deepStrictEqual(plugin.meta, expectedMeta) + }) + + for (const [name, processor] of Object.entries(plugin.processors)) { + it(`"${name}" processor should have a meta object.`, () => { + assert.deepStrictEqual(processor.meta, expectedMeta) + }) + } +}) diff --git a/tools/update-meta.ts b/tools/update-meta.ts new file mode 100644 index 000000000..871f5235c --- /dev/null +++ b/tools/update-meta.ts @@ -0,0 +1,38 @@ +import fs from "fs" +import path from "path" +import { ESLint } from "eslint" +import { name, version } from "../package.json" +import { getNewVersion } from "./lib/changesets-util" + +const META_PATH = path.join(__dirname, "../src/meta.ts") + +void main() + +/** main */ +async function main() { + if (!fs.existsSync(META_PATH)) { + fs.writeFileSync(META_PATH, "", "utf8") + } + const eslint = new ESLint({ fix: true }) + const [result] = await eslint.lintText( + `/* + * IMPORTANT! + * This file has been automatically generated, + * in order to update its content execute "yarn update" + */ +export const name = ${JSON.stringify(name)} as const; +export const version = ${JSON.stringify(await getVersion())} as const; +`, + { filePath: META_PATH }, + ) + fs.writeFileSync(META_PATH, result.output!, "utf8") +} + +/** Get version */ +function getVersion() { + // eslint-disable-next-line no-process-env -- ignore + if (process.env.IN_VERSION_CI_SCRIPT) { + return getNewVersion() + } + return version +} diff --git a/tools/update-rules.ts b/tools/update-rules.ts index ec94622af..7efad9753 100644 --- a/tools/update-rules.ts +++ b/tools/update-rules.ts @@ -21,7 +21,11 @@ function toIdentifier(str: string) { return camelCase(clean) } -const content = ` +const content = `/* +* IMPORTANT! +* This file has been automatically generated, +* in order to update its content execute "yarn update" +*/ import type { RuleModule } from "../types" ${rules .map( diff --git a/tools/update-rulesets.ts b/tools/update-rulesets.ts index 2a9dfed59..5c667b623 100644 --- a/tools/update-rulesets.ts +++ b/tools/update-rulesets.ts @@ -2,7 +2,12 @@ import path from "path" import fs from "fs" import { rules } from "./lib/load-rules" -const baseContent = `export = { +const baseContent = `/* +* IMPORTANT! +* This file has been automatically generated, +* in order to update its content execute "yarn update" +*/ +export = { plugins: ["svelte"], overrides: [ { @@ -37,7 +42,12 @@ const baseFilePath = path.resolve(__dirname, "../src/configs/base.ts") // Update file. fs.writeFileSync(baseFilePath, baseContent) -const recommendedContent = `import path from "path" +const recommendedContent = `/* +* IMPORTANT! +* This file has been automatically generated, +* in order to update its content execute "yarn update" +*/ +import path from "path" const base = require.resolve("./base") const baseExtend = path.extname(\`\${base}\`) === ".ts" ? "plugin:svelte/base" : base @@ -64,7 +74,12 @@ const recommendedFilePath = path.resolve( // Update file. fs.writeFileSync(recommendedFilePath, recommendedContent) -const prettierContent = `import path from "path" +const prettierContent = `/* +* IMPORTANT! +* This file has been automatically generated, +* in order to update its content execute "yarn update" +*/ +import path from "path" const base = require.resolve("./base") const baseExtend = path.extname(\`\${base}\`) === ".ts" ? "plugin:svelte/base" : base diff --git a/tools/update-types-for-node.ts b/tools/update-types-for-node.ts index 438330b40..ec637a5b6 100644 --- a/tools/update-types-for-node.ts +++ b/tools/update-types-for-node.ts @@ -25,7 +25,12 @@ const svelteNodeNames = Object.keys(visitorKeys).filter( ) const estreeCode = [ - `// + `/* + * IMPORTANT! + * This file has been automatically generated, + * in order to update its content execute "yarn update" + */ +// // Replace type information to use "@typescript-eslint/types" instead of "estree". // diff --git a/tools/update.ts b/tools/update.ts index 06847339d..560dde3cb 100644 --- a/tools/update.ts +++ b/tools/update.ts @@ -4,3 +4,4 @@ import "./update-docs" import "./update-readme" import "./update-docs-rules-index" import "./update-types-for-node" +import "./update-meta" diff --git a/tsconfig.json b/tsconfig.json index aec0c961b..2c3b5e365 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,7 +19,8 @@ "paths": { "*": ["typings/*"] }, - "skipLibCheck": true + "skipLibCheck": true, + "resolveJsonModule": true }, "include": [ "src/**/*", From 04fb00c526e36a7f3f53c71d2d5b50e62b6ccb14 Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Mon, 8 May 2023 19:55:03 +0900 Subject: [PATCH 2/5] Create wicked-ways-leave.md --- .changeset/wicked-ways-leave.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/wicked-ways-leave.md diff --git a/.changeset/wicked-ways-leave.md b/.changeset/wicked-ways-leave.md new file mode 100644 index 000000000..91a7326d1 --- /dev/null +++ b/.changeset/wicked-ways-leave.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-svelte": minor +--- + +feat: export meta object From d053b6cebb0ff1640bb620aedf3479e200a97236 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Mon, 8 May 2023 20:01:44 +0900 Subject: [PATCH 3/5] fix: script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 546045945..a272d4305 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "sveltejs" ], "scripts": { - "build": "yarn build:meta && yarn build:tsc", + "build": "yarn build:meta && yarn build:ts", "build:meta": "yarn ts ./tools/update-meta.ts", "build:ts": "tsc --project ./tsconfig.build.json", "clean": "rimraf .nyc_output lib coverage build .svelte-kit svelte.config-dist.js", From fc8afd2e1b76171e922827cb4e2675ec8c8ff363 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Mon, 8 May 2023 20:14:34 +0900 Subject: [PATCH 4/5] chore: update --- src/types-for-node.ts | 3 +++ src/utils/rules.ts | 3 +++ tools/update-rules.ts | 8 ++++---- tools/update-rulesets.ts | 24 ++++++++++++------------ tools/update-types-for-node.ts | 7 ++++++- typings/estree/index.d.ts | 3 +++ 6 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/types-for-node.ts b/src/types-for-node.ts index 1b1eebb3a..f69079667 100644 --- a/src/types-for-node.ts +++ b/src/types-for-node.ts @@ -1,3 +1,6 @@ +// IMPORTANT! +// This file has been automatically generated, +// in order to update its content execute "yarn update" // // The information here can be calculated by calculating the type, // but is pre-defined to avoid the computational cost. diff --git a/src/utils/rules.ts b/src/utils/rules.ts index e50dc656e..7f02e373c 100644 --- a/src/utils/rules.ts +++ b/src/utils/rules.ts @@ -1,3 +1,6 @@ +// IMPORTANT! +// This file has been automatically generated, +// in order to update its content execute "yarn update" import type { RuleModule } from "../types" import typescriptEslintNoUnnecessaryCondition from "../rules/@typescript-eslint/no-unnecessary-condition" import blockLang from "../rules/block-lang" diff --git a/tools/update-rules.ts b/tools/update-rules.ts index 7efad9753..0e2c9ef37 100644 --- a/tools/update-rules.ts +++ b/tools/update-rules.ts @@ -22,10 +22,10 @@ function toIdentifier(str: string) { } const content = `/* -* IMPORTANT! -* This file has been automatically generated, -* in order to update its content execute "yarn update" -*/ + * IMPORTANT! + * This file has been automatically generated, + * in order to update its content execute "yarn update" + */ import type { RuleModule } from "../types" ${rules .map( diff --git a/tools/update-rulesets.ts b/tools/update-rulesets.ts index 5c667b623..71fd0d3d3 100644 --- a/tools/update-rulesets.ts +++ b/tools/update-rulesets.ts @@ -3,10 +3,10 @@ import fs from "fs" import { rules } from "./lib/load-rules" const baseContent = `/* -* IMPORTANT! -* This file has been automatically generated, -* in order to update its content execute "yarn update" -*/ + * IMPORTANT! + * This file has been automatically generated, + * in order to update its content execute "yarn update" + */ export = { plugins: ["svelte"], overrides: [ @@ -43,10 +43,10 @@ const baseFilePath = path.resolve(__dirname, "../src/configs/base.ts") fs.writeFileSync(baseFilePath, baseContent) const recommendedContent = `/* -* IMPORTANT! -* This file has been automatically generated, -* in order to update its content execute "yarn update" -*/ + * IMPORTANT! + * This file has been automatically generated, + * in order to update its content execute "yarn update" + */ import path from "path" const base = require.resolve("./base") const baseExtend = @@ -75,10 +75,10 @@ const recommendedFilePath = path.resolve( fs.writeFileSync(recommendedFilePath, recommendedContent) const prettierContent = `/* -* IMPORTANT! -* This file has been automatically generated, -* in order to update its content execute "yarn update" -*/ + * IMPORTANT! + * This file has been automatically generated, + * in order to update its content execute "yarn update" + */ import path from "path" const base = require.resolve("./base") const baseExtend = diff --git a/tools/update-types-for-node.ts b/tools/update-types-for-node.ts index ec637a5b6..a9b7abdcb 100644 --- a/tools/update-types-for-node.ts +++ b/tools/update-types-for-node.ts @@ -43,7 +43,12 @@ export type Statement = TSESTree.Statement export type Pattern = TSESTree.Pattern`, ] const typesForNodeCode = [ - `// + `/* + * IMPORTANT! + * This file has been automatically generated, + * in order to update its content execute "yarn update" + */ +// // The information here can be calculated by calculating the type, // but is pre-defined to avoid the computational cost. // diff --git a/typings/estree/index.d.ts b/typings/estree/index.d.ts index 306dd6e31..d7307b2c3 100644 --- a/typings/estree/index.d.ts +++ b/typings/estree/index.d.ts @@ -1,3 +1,6 @@ +// IMPORTANT! +// This file has been automatically generated, +// in order to update its content execute "yarn update" // // Replace type information to use "@typescript-eslint/types" instead of "estree". // From faf168db2c0d146cb22b59d61c267c70703dc22d Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Tue, 9 May 2023 10:45:44 +0900 Subject: [PATCH 5/5] test: fix --- tests/src/meta.ts | 6 ++++-- tools/lib/changesets-util.ts | 20 ++------------------ 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/tests/src/meta.ts b/tests/src/meta.ts index 79023dd5d..98a395df9 100644 --- a/tests/src/meta.ts +++ b/tests/src/meta.ts @@ -8,12 +8,14 @@ const expectedMeta = { describe("Test for meta object", () => { it("A plugin should have a meta object.", () => { - assert.deepStrictEqual(plugin.meta, expectedMeta) + assert.strictEqual(plugin.meta.name, expectedMeta.name) + assert.strictEqual(typeof plugin.meta.version, "string") }) for (const [name, processor] of Object.entries(plugin.processors)) { it(`"${name}" processor should have a meta object.`, () => { - assert.deepStrictEqual(processor.meta, expectedMeta) + assert.strictEqual(processor.meta.name, expectedMeta.name) + assert.strictEqual(typeof processor.meta.version, "string") }) } }) diff --git a/tools/lib/changesets-util.ts b/tools/lib/changesets-util.ts index 3824f963e..ac5405bd5 100644 --- a/tools/lib/changesets-util.ts +++ b/tools/lib/changesets-util.ts @@ -1,25 +1,9 @@ -import assembleReleasePlan from "@changesets/assemble-release-plan" -import readChangesets from "@changesets/read" -import { read } from "@changesets/config" -import { getPackages } from "@manypkg/get-packages" -import { readPreState } from "@changesets/pre" +import getReleasePlan from "@changesets/get-release-plan" import path from "path" -const root = path.resolve(__dirname, "../..") - /** Get new version string from changesets */ export async function getNewVersion(): Promise { - const packages = await getPackages(root) - const preState = await readPreState(root) - const config = await read(root, packages) - const changesets = await readChangesets(root) - - const releasePlan = assembleReleasePlan( - changesets, - packages, - config, - preState, - ) + const releasePlan = await getReleasePlan(path.resolve(__dirname, "../..")) return releasePlan.releases.find( ({ name }) => name === "eslint-plugin-svelte",