UNPKG

6.98 kBMarkdownView Raw
1# Metalint
2
3<!-- Utiliser du HTML pour faire flotter l'image à droite. -->
4<!-- markdownlint-disable-next-line no-inline-html-->
5<img src="asset/logo.svg" align="right" alt="">
6
7[![npm][img-npm]][link-npm]
8[![build][img-build]][link-build]
9[![coverage][img-coverage]][link-coverage]
10[![semver][img-semver]][link-semver]
11
12> _Un linter pour les gouverner tous._
13
14## Description
15
16**Metalint** est un outil pour analyser tous les fichiers de votre projet.
17L'analyse est déléguée à des linters (outils d'analyse statique de code
18source) :
19
20<!-- markdownlint-disable no-inline-html -->
21<table>
22 <tr>
23 <th>Langage / Technologie</th>
24 <th>Linters</th>
25 </tr>
26 <tr>
27 <td>CoffeeScript</td>
28 <td>
29 <a title="@coffeelint/cli"
30 href="https://www.npmjs.com/package/@coffeelint/cli">CoffeeLint</a>
31 </td>
32 </tr>
33 <tr>
34 <td>CSS</td>
35 <td>
36 <a title="csslint"
37 href="https://www.npmjs.com/package/csslint">CSSLint</a>,
38 <a title="doiuse" href="https://www.npmjs.com/package/doiuse">DoIUse</a>,
39 <a title="prettier"
40 href="https://www.npmjs.com/package/prettier">Prettier</a>,
41 <a title="purgecss"
42 href="https://www.npmjs.com/package/purgecss">PurgeCSS</a>,
43 <a title="stylelint"
44 href="https://www.npmjs.com/package/stylelint">Stylelint</a>
45 </td>
46 </tr>
47 <tr>
48 <td>HTML</td>
49 <td>
50 <a title="htmlhint"
51 href="https://www.npmjs.com/package/htmlhint">HTMLHint</a>,
52 <a title="htmllint"
53 href="https://www.npmjs.com/package/htmllint">htmllint</a>,
54 <a title="markuplint"
55 href="https://www.npmjs.com/package/markuplint">markuplint</a>,
56 <a title="prettier"
57 href="https://www.npmjs.com/package/prettier">Prettier</a>
58 </td>
59 </tr>
60 <tr>
61 <td>JavaScript</td>
62 <td>
63 <a title="eslint" href="https://www.npmjs.com/package/eslint">ESLint</a>,
64 <a title="jshint" href="https://www.npmjs.com/package/jshint">JSHint</a>,
65 <a title="standard"
66 href="https://www.npmjs.com/package/standard">JavaScript Standard
67 Style</a>,
68 <a title="prettier"
69 href="https://www.npmjs.com/package/prettier">Prettier</a>
70 </td>
71 </tr>
72 <tr>
73 <td>JSON</td>
74 <td>
75 <a title="@prantlf/jsonlint"
76 href="https://www.npmjs.com/package/@prantlf/jsonlint">@prantlf/JSON
77 Lint</a>,
78 <a title="jsonlint-mod"
79 href="https://www.npmjs.com/package/jsonlint-mod">JSON Lint (mod)</a>,
80 <a title="prettier"
81 href="https://www.npmjs.com/package/prettier">Prettier</a>
82 </td>
83 </tr>
84 <tr>
85 <td>Less</td>
86 <td>
87 <a title="prettier"
88 href="https://www.npmjs.com/package/prettier">Prettier</a>,
89 <a title="stylelint"
90 href="https://www.npmjs.com/package/stylelint">Stylelint</a>
91 </td>
92 </tr>
93 <tr>
94 <td>Markdown</td>
95 <td>
96 <a title="markdownlint"
97 href="https://www.npmjs.com/package/markdownlint">MarkdownLint</a>
98 </td>
99 </tr>
100 <tr>
101 <td>package.json</td>
102 <td>
103 <a title="npm-check-updates"
104 href="https://www.npmjs.com/package/npm-check-updates"
105 >npm-check-updates</a>,
106 <a title="npm-package-json-lint"
107 href="https://www.npmjs.com/package/npm-package-json-lint"
108 >npm-package-json-lint</a>,
109 <a title="sort-package-json"
110 href="https://www.npmjs.com/package/sort-package-json"
111 >Sort Package.json</a>
112 </td>
113 </tr>
114 <tr>
115 <td>SCSS</td>
116 <td>
117 <a title="prettier"
118 href="https://www.npmjs.com/package/prettier">Prettier</a>,
119 <a title="stylelint"
120 href="https://www.npmjs.com/package/stylelint">Stylelint</a>
121 </td>
122 </tr>
123 <tr>
124 <td>SugarSS</td>
125 <td>
126 <a title="stylelint"
127 href="https://www.npmjs.com/package/stylelint">Stylelint</a>
128 </td>
129 </tr>
130 <tr>
131 <td>WebExtension</td>
132 <td>
133 <a title="addons-linter"
134 href="https://www.npmjs.com/package/addons-linter">Add-ons Linter</a>
135 </td>
136 </tr>
137 <tr>
138 <td>YAML</td>
139 <td>
140 <a title="yaml-lint"
141 href="https://www.npmjs.com/package/yaml-lint">YAML Lint</a>,
142 <a title="prettier"
143 href="https://www.npmjs.com/package/prettier">Prettier</a>
144 </td>
145 </tr>
146</table>
147<!-- markdownlint-enable no-inline-html -->
148
149## Installation
150
151Vous pouvez installer Metalint en utilisant [npm][link-npm] :
152
153```Shell
154npm install --save-dev --save-exact metalint
155```
156
157## Configuration
158
159Tous les fichiers de configuration sont à regrouper dans le répertoire
160`.metalint/` qui doit être placé à la racine du projet. Le fichier
161`metalint.config.js` export un objet JSON indiquant les linters à utiliser pour
162chaque fichier. Les autres fichiers contiennent les options spécifiques pour les
163linters.
164
165## Exemple
166
167Dans cet exemple des fichiers de configuration, Metalint analyse les fichiers
168JavaScript (non-minifiés), HTML et CSS ; avec respectivement les linters ESLint,
169HTMLHint et Stylelint.
170
171```JavaScript
172// .metalint/metalint.config.js
173export default {
174 patterns: ["**", "!/.git/**", "!/node_modules/**"],
175 checkers: [
176 {
177 patterns: ["*.js", "!*.min.js"],
178 linters: "eslint",
179 }, {
180 patterns: "*.html",
181 linters: "htmlhint",
182 }, {
183 patterns: "*.css",
184 linters: "stylelint",
185 },
186 ],
187};
188```
189
190```JavaScript
191// .metalint/eslint.config.js
192export default {
193 rules: {
194 quotes: ["error", "double"],
195 semi: ["error", "always"],
196 },
197};
198```
199
200```JavaScript
201// .metalint/htmlhint.config.js
202export default {
203 "attr-value-not-empty": false,
204};
205```
206
207```JavaScript
208// .metalint/stylelint.config.js
209export default {
210 rules: {
211 "color-no-invalid-hex": true,
212 },
213};
214```
215
216## Intégration
217
218Après avoir installé Metalint et les linters dans votre projet npm, vous pouvez
219ajouter le script suivant dans votre `package.json` :
220
221```JSON
222{
223 "scripts": {
224 "lint": "metalint"
225 }
226}
227```
228
229Metalint est maintenant utilisable avec la commande : `npm run lint`
230
231[img-npm]: https://img.shields.io/npm/dm/metalint?label=npm&logo=npm&logoColor=white
232[img-build]: https://img.shields.io/github/actions/workflow/status/regseb/metalint/ci.yml?branch=main&logo=github&logoColor=white
233
234<!-- Attendre que le logo de Stryker soit accepté.
235 https://github.com/simple-icons/simple-icons/pull/7388 -->
236
237[img-coverage]: https://img.shields.io/endpoint?label=coverage&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fregseb%2Fmetalint%2Fmain
238[img-semver]: https://img.shields.io/badge/semver-2.0.0-blue?logo=semver&logoColor=white
239[link-npm]: https://www.npmjs.com/package/metalint
240[link-build]: https://github.com/regseb/metalint/actions/workflows/ci.yml?query=branch%3Amain
241[link-coverage]: https://dashboard.stryker-mutator.io/reports/github.com/regseb/metalint/main
242[link-semver]: https://semver.org/spec/v2.0.0.html "Semantic Versioning 2.0.0"