Skip to content

Commit

Permalink
chore: minor refactor and add integration test (#371)
Browse files Browse the repository at this point in the history
* chore: minor refactor and add integration test

* fix

* fix
  • Loading branch information
ota-meshi committed Apr 28, 2024
1 parent 30a1840 commit cb83527
Show file tree
Hide file tree
Showing 27 changed files with 269 additions and 72 deletions.
9 changes: 9 additions & 0 deletions .github/workflows/NodeCI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,15 @@ jobs:
run: npm install -f
- name: Test
run: npm test
test-integration:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- name: Install Packages
run: npm install -f
- name: Test
run: npm run test:integration
test-and-coverage:
runs-on: ubuntu-latest
steps:
Expand Down
3 changes: 0 additions & 3 deletions .github/workflows/Release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ jobs:
- name: Install Dependencies
run: npm install -f

- name: Build
run: npm run build:tsup

- name: Create Release Pull Request or Publish to npm
id: changesets
uses: changesets/action@v1
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,4 @@ dist
/docs-build/shim/eslint.mjs
/docs-build/shim/astro-eslint-parser.mjs
/docs-build/shim/eslint-plugin-jsx-a11y.mjs
/tests/fixtures/integration/**/actual.json
2 changes: 2 additions & 0 deletions eslint.config.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ module.exports = [
"tests/fixtures/rules/valid-compile/valid/babel/",
"tests/fixtures/rules/valid-compile/valid/ts/",
"tests/fixtures/rules/prefer-style-directive/",
"tests/fixtures/integration/**/actual.json",
"tests/fixtures/integration/*/src/",
"build/",
],
},
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
"build:tsup": "tsup",
"clean": "rimraf .nyc_output dist coverage",
"test": "npm run mocha -- \"tests/src/**/*.ts\" --reporter dot --timeout 60000 && npm run test:type",
"test:integration": "npm run build && npm run test:integration-wo-build",
"test:integration-wo-build": "npm run mocha -- \"tests/integration/**/*.ts\" --reporter dot --timeout 60000",
"test:type": "tsc --noEmit",
"cover": "nyc --reporter=lcov npm run test",
"debug": "npm run mocha -- \"tests/src/**/*.ts\" --reporter dot --timeout 60000",
Expand Down
50 changes: 0 additions & 50 deletions src/plugin-config-builder.ts → src/cjs-config-builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,56 +7,6 @@ import flatAll from "./configs/flat/all"
import { buildA11yFlatConfigs, buildA11yLegacyConfigs } from "./a11y"
import type { Linter } from "eslint"

type ESMConfigs = {
base: Linter.FlatConfig[]
recommended: Linter.FlatConfig[]
all: Linter.FlatConfig[]
"jsx-a11y-strict": Linter.FlatConfig[]
"jsx-a11y-recommended": Linter.FlatConfig[]
// For backward compatibility
"flat/base": Linter.FlatConfig[]
"flat/recommended": Linter.FlatConfig[]
"flat/all": Linter.FlatConfig[]
"flat/jsx-a11y-strict": Linter.FlatConfig[]
"flat/jsx-a11y-recommended": Linter.FlatConfig[]
}
/**
* Build configs for ESM Module
*/
export function buildEsmConfigs(): ESMConfigs {
const esmConfigs: ESMConfigs = {
base: flatBase as Linter.FlatConfig[],
recommended: flatRecommended as Linter.FlatConfig[],
all: flatAll as Linter.FlatConfig[],
"jsx-a11y-strict": null as never,
"jsx-a11y-recommended": null as never,
// For backward compatibility
"flat/base": flatBase as Linter.FlatConfig[],
"flat/recommended": flatRecommended as Linter.FlatConfig[],
"flat/all": flatAll as Linter.FlatConfig[],
"flat/jsx-a11y-strict": null as never,
"flat/jsx-a11y-recommended": null as never,
}

const a11yFlatConfigs = buildA11yFlatConfigs()
for (const configName of Object.keys(a11yFlatConfigs)) {
Object.defineProperty(esmConfigs, configName, {
enumerable: true,
get() {
return a11yFlatConfigs[configName]
},
})
Object.defineProperty(esmConfigs, `flat/${configName}`, {
enumerable: true,
get() {
return a11yFlatConfigs[configName]
},
})
}

return esmConfigs
}

type CJSConfigs = {
base: Linter.Config
recommended: Linter.Config
Expand Down
4 changes: 2 additions & 2 deletions src/configs/flat/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ export default [
{
plugins: {
get astro(): ESLint.Plugin {
// eslint-disable-next-line @typescript-eslint/no-require-imports -- ignore
return (plugin ??= require("../../plugin-without-config"))
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires -- ignore
return (plugin ??= require("../../plugin").plugin)
},
},
},
Expand Down
55 changes: 55 additions & 0 deletions src/esm-config-builder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import flatBase from "./configs/flat/base"
import flatRecommended from "./configs/flat/recommended"
import flatAll from "./configs/flat/all"
import { buildA11yFlatConfigs } from "./a11y"
import type { Linter } from "eslint"

type ESMConfigs = {
base: Linter.FlatConfig[]
recommended: Linter.FlatConfig[]
all: Linter.FlatConfig[]
"jsx-a11y-strict": Linter.FlatConfig[]
"jsx-a11y-recommended": Linter.FlatConfig[]
// For backward compatibility
"flat/base": Linter.FlatConfig[]
"flat/recommended": Linter.FlatConfig[]
"flat/all": Linter.FlatConfig[]
"flat/jsx-a11y-strict": Linter.FlatConfig[]
"flat/jsx-a11y-recommended": Linter.FlatConfig[]
}
/**
* Build configs for ESM Module
*/
export function buildEsmConfigs(): ESMConfigs {
const esmConfigs: ESMConfigs = {
base: flatBase as Linter.FlatConfig[],
recommended: flatRecommended as Linter.FlatConfig[],
all: flatAll as Linter.FlatConfig[],
"jsx-a11y-strict": null as never,
"jsx-a11y-recommended": null as never,
// For backward compatibility
"flat/base": flatBase as Linter.FlatConfig[],
"flat/recommended": flatRecommended as Linter.FlatConfig[],
"flat/all": flatAll as Linter.FlatConfig[],
"flat/jsx-a11y-strict": null as never,
"flat/jsx-a11y-recommended": null as never,
}

const a11yFlatConfigs = buildA11yFlatConfigs()
for (const configName of Object.keys(a11yFlatConfigs)) {
Object.defineProperty(esmConfigs, configName, {
enumerable: true,
get() {
return a11yFlatConfigs[configName]
},
})
Object.defineProperty(esmConfigs, `flat/${configName}`, {
enumerable: true,
get() {
return a11yFlatConfigs[configName]
},
})
}

return esmConfigs
}
6 changes: 3 additions & 3 deletions src/index.cts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { buildCjsConfigs } from "./plugin-config-builder"
import { meta, rules, processors, environments } from "./plugin-without-config"
import { buildCjsConfigs } from "./cjs-config-builder"
import { plugin } from "./plugin"
const configs = buildCjsConfigs()
export = { meta, configs, rules, processors, environments }
export = Object.assign(plugin, { configs })
10 changes: 5 additions & 5 deletions src/index.mts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { buildEsmConfigs } from "./plugin-config-builder"
import { meta, rules, processors, environments } from "./plugin-without-config"
const configs = buildEsmConfigs()
export default { meta, configs, rules, processors, environments }
export { meta, configs, rules, processors, environments }
import { buildEsmConfigs } from "./esm-config-builder"
import { plugin } from "./plugin"
export const configs = buildEsmConfigs()
export default Object.assign(plugin, { configs })
export const { meta, rules, processors, environments } = plugin
16 changes: 10 additions & 6 deletions src/plugin-without-config.ts → src/plugin.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
import { rules as ruleList } from "./utils/rules"
import * as processorsDefines from "./processor"
import type { Rule } from "eslint"
import * as meta from "./meta"
import { environments } from "./environments"

export * as meta from "./meta"
export { environments } from "./environments"

export const rules = ruleList.reduce(
const rules = ruleList.reduce(
(obj, r) => {
obj[r.meta.docs.ruleName] = r as never
return obj
},
{} as { [key: string]: Rule.RuleModule },
)

export const processors = {
const processors = {
".astro": processorsDefines.astroProcessor,
astro: processorsDefines.astroProcessor,
"client-side-ts": processorsDefines.clientSideTsProcessor,
}
export const plugin = {
meta,
environments,
rules,
processors,
}
1 change: 1 addition & 0 deletions tests/fixtures/integration/config/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package-lock=false
6 changes: 6 additions & 0 deletions tests/fixtures/integration/config/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import js from "@eslint/js"
import eslintPluginAstro from "eslint-plugin-astro"
export default [
js.configs.recommended,
...eslintPluginAstro.configs.recommended,
]
26 changes: 26 additions & 0 deletions tests/fixtures/integration/config/expected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
[
{
"filePath": "src/index.astro",
"messages": [
{
"ruleId": "no-unused-vars",
"severity": 2,
"message": "'foo' is assigned a value but never used.",
"line": 2,
"column": 7,
"nodeType": "Identifier",
"messageId": "unusedVar",
"endLine": 2,
"endColumn": 10
}
],
"suppressedMessages": [],
"errorCount": 1,
"fatalErrorCount": 0,
"warningCount": 0,
"fixableErrorCount": 0,
"fixableWarningCount": 0,
"source": "---\nconst foo = {}\n---\n\n<a></a>\n",
"usedDeprecatedRules": []
}
]
15 changes: 15 additions & 0 deletions tests/fixtures/integration/config/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "eslint-plugin-astro-integration-test-for-legacy-config",
"version": "1.0.0",
"private": true,
"type": "module",
"scripts": {
"test": "eslint . --format json"
},
"license": "MIT",
"devDependencies": {
"@eslint/js": "latest",
"eslint": "^9.1.1",
"eslint-plugin-astro": "file:../../../.."
}
}
5 changes: 5 additions & 0 deletions tests/fixtures/integration/config/src/index.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
const foo = {}
---

<a></a>
6 changes: 6 additions & 0 deletions tests/fixtures/integration/legacy-config/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
"use strict"

module.exports = {
root: true,
extends: ["eslint:recommended", "plugin:astro/recommended"],
}
1 change: 1 addition & 0 deletions tests/fixtures/integration/legacy-config/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package-lock=false
26 changes: 26 additions & 0 deletions tests/fixtures/integration/legacy-config/expected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
[
{
"filePath": "src/index.astro",
"messages": [
{
"ruleId": "no-unused-vars",
"severity": 2,
"message": "'foo' is assigned a value but never used.",
"line": 2,
"column": 7,
"nodeType": "Identifier",
"messageId": "unusedVar",
"endLine": 2,
"endColumn": 10
}
],
"suppressedMessages": [],
"errorCount": 1,
"fatalErrorCount": 0,
"warningCount": 0,
"fixableErrorCount": 0,
"fixableWarningCount": 0,
"source": "---\nconst foo = {}\n---\n\n<a></a>\n",
"usedDeprecatedRules": []
}
]
13 changes: 13 additions & 0 deletions tests/fixtures/integration/legacy-config/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "eslint-plugin-astro-integration-test-for-legacy-config",
"version": "1.0.0",
"private": true,
"scripts": {
"test": "eslint . --format json"
},
"license": "MIT",
"devDependencies": {
"eslint": "^9.1.1",
"eslint-plugin-astro": "file:../../../.."
}
}
5 changes: 5 additions & 0 deletions tests/fixtures/integration/legacy-config/src/index.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
const foo = {}
---

<a></a>
3 changes: 3 additions & 0 deletions tests/fixtures/integration/legacy-config/test-env.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ESLINT_USE_FLAT_CONFIG": false
}
Loading

0 comments on commit cb83527

Please sign in to comment.