1
1
mirror of https://github.com/theoludwig/eslint-config-conventions.git synced 2025-05-18 12:02:33 +02:00

Compare commits

...

4 Commits

Author SHA1 Message Date
34ec74cff7 docs: simplify README 2023-07-02 16:02:28 +02:00
f5a69d69f5 fix: update author - Théo LUDWIG 2023-07-02 15:57:44 +02:00
e071e917f6 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint@^8.44.0`
2023-07-02 15:54:50 +02:00
528a31316d refactor: usage of node:test instead of tap 2023-07-02 15:46:14 +02:00
14 changed files with 829 additions and 4455 deletions

View File

@ -4,10 +4,10 @@
"env": { "env": {
"browser": true, "browser": true,
"node": true, "node": true,
"es2022": true "es2024": true
}, },
"parserOptions": { "parserOptions": {
"ecmaVersion": 2022, "ecmaVersion": "latest",
"sourceType": "module", "sourceType": "module",
"ecmaFeatures": { "ecmaFeatures": {
"jsx": true "jsx": true

View File

@ -10,7 +10,7 @@ jobs:
lint: lint:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
steps: steps:
- uses: 'actions/checkout@v3.5.2' - uses: 'actions/checkout@v3.5.3'
- name: 'Setup Node.js' - name: 'Setup Node.js'
uses: 'actions/setup-node@v3.6.0' uses: 'actions/setup-node@v3.6.0'

View File

@ -13,7 +13,7 @@ jobs:
pull-requests: 'write' pull-requests: 'write'
id-token: 'write' id-token: 'write'
steps: steps:
- uses: 'actions/checkout@v3.5.2' - uses: 'actions/checkout@v3.5.3'
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false persist-credentials: false

View File

@ -10,7 +10,7 @@ jobs:
test: test:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
steps: steps:
- uses: 'actions/checkout@v3.5.2' - uses: 'actions/checkout@v3.5.3'
- name: 'Setup Node.js' - name: 'Setup Node.js'
uses: 'actions/setup-node@v3.6.0' uses: 'actions/setup-node@v3.6.0'

8
.taprc
View File

@ -1,8 +0,0 @@
ts: false
jsx: false
flow: false
check-coverage: true
coverage: true
test-ignore:
- 'test/fixtures'

View File

@ -60,7 +60,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at reported to the community leaders responsible for enforcement at
<contact@divlo.fr>. <contact@theoludwig.fr>.
All complaints will be reviewed and investigated promptly and fairly. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the All community leaders are obligated to respect the privacy and security of the

View File

@ -19,7 +19,7 @@ All work on **eslint-config-conventions** happens directly on this repository. B
## Pull Requests ## Pull Requests
- **Please first discuss** the change you wish to make via [issue](https://github.com/Divlo/eslint-config-conventions/issues) before making a change. It might avoid a waste of your time. - **Please first discuss** the change you wish to make via [issue](https://github.com/theoludwig/eslint-config-conventions/issues) before making a change. It might avoid a waste of your time.
- Ensure your code respect linting. - Ensure your code respect linting.

View File

@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) Divlo Copyright (c) Théo LUDWIG
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -11,8 +11,8 @@
<a href="./LICENSE"><img src="https://img.shields.io/badge/licence-MIT-blue.svg" alt="Licence MIT"/></a> <a href="./LICENSE"><img src="https://img.shields.io/badge/licence-MIT-blue.svg" alt="Licence MIT"/></a>
<a href="./CODE_OF_CONDUCT.md"><img src="https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg" alt="Contributor Covenant" /></a> <a href="./CODE_OF_CONDUCT.md"><img src="https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg" alt="Contributor Covenant" /></a>
<br /> <br />
<a href="https://github.com/Divlo/eslint-config-conventions/actions/workflows/lint.yml"><img src="https://github.com/Divlo/eslint-config-conventions/actions/workflows/lint.yml/badge.svg?branch=develop" /></a> <a href="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/lint.yml"><img src="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/lint.yml/badge.svg?branch=develop" /></a>
<a href="https://github.com/Divlo/eslint-config-conventions/actions/workflows/test.yml"><img src="https://github.com/Divlo/eslint-config-conventions/actions/workflows/test.yml/badge.svg?branch=develop" /></a> <a href="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/test.yml"><img src="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/test.yml/badge.svg?branch=develop" /></a>
<br /> <br />
<a href="https://conventionalcommits.org"><img src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg" alt="Conventional Commits" /></a> <a href="https://conventionalcommits.org"><img src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg" alt="Conventional Commits" /></a>
<a href="https://github.com/semantic-release/semantic-release"><img src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg" alt="semantic-release" /></a> <a href="https://github.com/semantic-release/semantic-release"><img src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg" alt="semantic-release" /></a>
@ -35,19 +35,16 @@ More information about **formatting rules** vs **code-quality rules** can be fou
### Installation ### Installation
`npm@<7` does not automatically install `peerDependencies`, so if that's what you're using, install them manually.
Here is an example, but use it only for reference, because your decisions regarding version ranges and range specifiers may vary.
```sh ```sh
npm install --save-dev \ npm install --save-dev \
eslint@^8.33.0 \ eslint@^8.44.0 \
eslint-plugin-import@^2.27.5 \ eslint-plugin-import@^2.27.5 \
eslint-plugin-promise@^6.1.1 \ eslint-plugin-promise@^6.1.1 \
eslint-plugin-unicorn@^47.0.0 \ eslint-plugin-unicorn@^47.0.0 \
eslint-config-conventions@latest eslint-config-conventions@latest
``` ```
Yes, this is a large number of packages. This is due to [a known limitation in ESLint](https://github.com/eslint/eslint/issues/3458). This is a large number of packages due to [a known limitation in ESLint](https://github.com/eslint/eslint/issues/3458).
This list of dependencies are: This list of dependencies are:
@ -63,15 +60,15 @@ If you want to use **TypeScript**, you also need to install:
```sh ```sh
npm install --save-dev \ npm install --save-dev \
typescript@^5.0.4 \ typescript@^5.0.4 \
@typescript-eslint/eslint-plugin@^5.59.5 \ @typescript-eslint/eslint-plugin@^5.60.1 \
@typescript-eslint/parser@^5.59.5 @typescript-eslint/parser@^5.60.1
``` ```
Dependencies are: Dependencies are:
- [TypeScript](https://github.com/Microsoft/TypeScript) - [TypeScript](https://github.com/Microsoft/TypeScript)
- [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint); ESLint rules for TypeScript. - [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint): ESLint rules for TypeScript.
- [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint); ESLint parser for TypeScript. - [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint): ESLint parser for TypeScript.
### Configuration with [Prettier](https://prettier.io/) (recommended) ### Configuration with [Prettier](https://prettier.io/) (recommended)
@ -82,7 +79,7 @@ npm install --save-dev prettier eslint-config-prettier eslint-plugin-prettier
# Create an empty config file to let editors and other tools know you are using Prettier # Create an empty config file to let editors and other tools know you are using Prettier
# You can personalize it with your own rules # You can personalize it with your own rules
echo {}> .prettierrc.json echo "{}" > .prettierrc.json
``` ```
#### `.eslintrc.json` #### `.eslintrc.json`
@ -109,8 +106,8 @@ echo {}> .prettierrc.json
```jsonc ```jsonc
{ {
"scripts": { "scripts": {
"lint:eslint": "eslint \"**/*.{js,jsx,ts,tsx}\" --ignore-path \".gitignore\"", "lint:eslint": "eslint . --ignore-path .gitignore",
"lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"" "lint:prettier": "prettier . --check --ignore-path .gitignore"
} }
} }
``` ```

5155
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,16 +3,16 @@
"version": "0.0.0-development", "version": "0.0.0-development",
"public": true, "public": true,
"description": "ESLint shareable config to enforce strict conventions and good code quality.", "description": "ESLint shareable config to enforce strict conventions and good code quality.",
"author": "Divlo <contact@divlo.fr>", "author": "Théo LUDWIG <contact@theoludwig.fr>",
"license": "MIT", "license": "MIT",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/Divlo/eslint-config-conventions.git" "url": "https://github.com/theoludwig/eslint-config-conventions.git"
}, },
"bugs": { "bugs": {
"url": "https://github.com/Divlo/eslint-config-conventions/issues" "url": "https://github.com/theoludwig/eslint-config-conventions/issues"
}, },
"homepage": "https://github.com/Divlo/eslint-config-conventions#readme", "homepage": "https://github.com/theoludwig/eslint-config-conventions#readme",
"keywords": [ "keywords": [
"eslintconfig", "eslintconfig",
"eslint", "eslint",
@ -39,42 +39,41 @@
"lint:commit": "commitlint", "lint:commit": "commitlint",
"lint:editorconfig": "editorconfig-checker", "lint:editorconfig": "editorconfig-checker",
"lint:markdown": "markdownlint-cli2", "lint:markdown": "markdownlint-cli2",
"lint:eslint": "eslint \".\" -c \"eslintrc.json\"", "lint:eslint": "eslint . -c eslintrc.json",
"lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"", "lint:prettier": "prettier . --check --ignore-path .gitignore",
"lint:staged": "lint-staged", "lint:staged": "lint-staged",
"test": "tap", "test": "node --test test/",
"release": "semantic-release", "release": "semantic-release",
"postinstall": "husky install", "postinstall": "husky install",
"prepublishOnly": "pinst --disable", "prepublishOnly": "pinst --disable",
"postpublish": "pinst --enable" "postpublish": "pinst --enable"
}, },
"peerDependencies": { "peerDependencies": {
"eslint": "^8.33.0", "eslint": "^8.44.0",
"eslint-plugin-import": "^2.27.5", "eslint-plugin-import": "^2.27.5",
"eslint-plugin-promise": "^6.1.1", "eslint-plugin-promise": "^6.1.1",
"eslint-plugin-unicorn": "^47.0.0" "eslint-plugin-unicorn": "^47.0.0"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "17.6.3", "@commitlint/cli": "17.6.6",
"@commitlint/config-conventional": "17.6.3", "@commitlint/config-conventional": "17.6.6",
"@tsconfig/strictest": "2.0.1", "@tsconfig/strictest": "2.0.1",
"@types/eslint": "8.37.0", "@types/eslint": "8.40.2",
"@types/tap": "15.0.8", "@types/node": "20.3.3",
"@typescript-eslint/eslint-plugin": "5.59.5", "@typescript-eslint/eslint-plugin": "5.60.1",
"@typescript-eslint/parser": "5.59.5", "@typescript-eslint/parser": "5.60.1",
"editorconfig-checker": "5.0.1", "editorconfig-checker": "5.1.1",
"eslint": "8.40.0", "eslint": "8.44.0",
"eslint-plugin-import": "2.27.5", "eslint-plugin-import": "2.27.5",
"eslint-plugin-promise": "6.1.1", "eslint-plugin-promise": "6.1.1",
"eslint-plugin-unicorn": "47.0.0", "eslint-plugin-unicorn": "47.0.0",
"husky": "8.0.3", "husky": "8.0.3",
"lint-staged": "13.2.2", "lint-staged": "13.2.3",
"markdownlint-cli2": "0.7.1", "markdownlint-cli2": "0.8.1",
"markdownlint-rule-relative-links": "1.1.2", "markdownlint-rule-relative-links": "2.1.0",
"pinst": "3.0.0", "pinst": "3.0.0",
"prettier": "2.8.8", "prettier": "2.8.8",
"semantic-release": "21.0.2", "semantic-release": "21.0.6",
"tap": "16.3.4",
"typescript": "5.0.4" "typescript": "5.0.4"
} }
} }

View File

@ -1,14 +1,20 @@
const tap = require('tap') const test = require('node:test')
const assert = require('node:assert/strict')
const config = require('../index.js') const config = require('../index.js')
/**
* @param {unknown} object
* @returns {boolean}
*/
const isObject = (object) => { const isObject = (object) => {
return typeof object === 'object' && object !== null return typeof object === 'object' && object !== null
} }
tap.test('test basic properties of config', async (t) => { test('test basic properties of config', async () => {
t.ok(isObject(config.parserOptions)) assert.ok(isObject(config))
t.ok(isObject(config.env)) assert.ok(isObject(config.parserOptions))
t.ok(isObject(config.rules)) assert.ok(isObject(config.env))
t.ok(isObject(config.overrides)) assert.ok(isObject(config.rules))
assert.ok(isObject(config.overrides))
}) })

View File

@ -1,5 +1,7 @@
const test = require('node:test')
const assert = require('node:assert/strict')
const { ESLint } = require('eslint') const { ESLint } = require('eslint')
const tap = require('tap')
const eslint = new ESLint({ const eslint = new ESLint({
ignore: false, ignore: false,
@ -7,31 +9,31 @@ const eslint = new ESLint({
overrideConfigFile: 'eslintrc.json' overrideConfigFile: 'eslintrc.json'
}) })
tap.test('ensure we validate correctly JavaScript files', async (t) => { test('ensure we validate correctly JavaScript files', async () => {
const [noErrors] = await eslint.lintFiles( const [noErrors] = await eslint.lintFiles(
'test/fixtures/javascript-no-errors.js' 'test/fixtures/javascript-no-errors.js'
) )
const [withErrors] = await eslint.lintFiles( const [withErrors] = await eslint.lintFiles(
'test/fixtures/javascript-with-errors.js' 'test/fixtures/javascript-with-errors.js'
) )
t.equal(noErrors.errorCount, 0) assert.strictEqual(noErrors?.errorCount, 0)
t.equal(withErrors.errorCount, 3) assert.strictEqual(withErrors?.errorCount, 3)
}) })
tap.test('ensure we validate correctly TypeScript files', async (t) => { test('ensure we validate correctly TypeScript files', async () => {
const [noErrors] = await eslint.lintFiles( const [noErrors] = await eslint.lintFiles(
'test/fixtures/typescript-no-errors.ts' 'test/fixtures/typescript-no-errors.ts'
) )
const [withErrors] = await eslint.lintFiles( const [withErrors] = await eslint.lintFiles(
'test/fixtures/javascript-with-errors.js' 'test/fixtures/javascript-with-errors.js'
) )
t.equal(noErrors.errorCount, 0) assert.strictEqual(noErrors?.errorCount, 0)
t.equal(withErrors.errorCount, 3) assert.strictEqual(withErrors?.errorCount, 3)
}) })
tap.test('ensure we allow top-level await', async (t) => { test('ensure we allow top-level await', async () => {
const [lintResult] = await eslint.lintFiles( const [lintResult] = await eslint.lintFiles(
'test/fixtures/top-level-await.mjs' 'test/fixtures/top-level-await.mjs'
) )
t.equal(lintResult.errorCount, 0) assert.strictEqual(lintResult?.errorCount, 0)
}) })

View File

@ -1,6 +1,7 @@
{ {
"extends": "@tsconfig/strictest/tsconfig.json", "extends": "@tsconfig/strictest/tsconfig.json",
"compilerOptions": { "compilerOptions": {
"resolveJsonModule": true,
"target": "ESNext", "target": "ESNext",
"module": "commonjs", "module": "commonjs",
"lib": ["ESNext"], "lib": ["ESNext"],