glab-setup-git-identity 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.changeset/README.md +8 -0
- package/.changeset/config.json +11 -0
- package/.github/workflows/release.yml +372 -0
- package/.husky/pre-commit +1 -0
- package/.jscpd.json +20 -0
- package/.prettierignore +7 -0
- package/.prettierrc +10 -0
- package/CHANGELOG.md +143 -0
- package/LICENSE +24 -0
- package/README.md +455 -0
- package/bunfig.toml +3 -0
- package/deno.json +7 -0
- package/docs/case-studies/issue-13/README.md +195 -0
- package/docs/case-studies/issue-13/hive-mind-issue-960.json +23 -0
- package/docs/case-studies/issue-13/hive-mind-pr-961-diff.txt +773 -0
- package/docs/case-studies/issue-13/hive-mind-pr-961.json +126 -0
- package/docs/case-studies/issue-21/README.md +384 -0
- package/docs/case-studies/issue-21/ci-logs/run-20803315337.txt +1188 -0
- package/docs/case-studies/issue-21/ci-logs/run-20885464993.txt +1310 -0
- package/docs/case-studies/issue-21/issue-111-data.txt +15 -0
- package/docs/case-studies/issue-21/issue-113-data.txt +15 -0
- package/docs/case-studies/issue-21/pr-112-data.json +109 -0
- package/docs/case-studies/issue-21/pr-112-diff.patch +1336 -0
- package/docs/case-studies/issue-21/pr-114-data.json +126 -0
- package/docs/case-studies/issue-21/pr-114-diff.patch +879 -0
- package/docs/case-studies/issue-3/README.md +338 -0
- package/docs/case-studies/issue-3/created-issues.md +32 -0
- package/docs/case-studies/issue-3/issue-data.json +29 -0
- package/docs/case-studies/issue-3/original-format-release-notes.mjs +212 -0
- package/docs/case-studies/issue-3/reference-pr-59-diff.txt +614 -0
- package/docs/case-studies/issue-3/reference-pr-59.json +109 -0
- package/docs/case-studies/issue-3/release-v0.1.0.json +9 -0
- package/docs/case-studies/issue-3/repositories-with-same-script.json +22 -0
- package/docs/case-studies/issue-3/research-notes.md +33 -0
- package/docs/case-studies/issue-7/BEST-PRACTICES-COMPARISON.md +334 -0
- package/docs/case-studies/issue-7/FORMATTER-COMPARISON.md +649 -0
- package/docs/case-studies/issue-7/current-repository-analysis.json +70 -0
- package/docs/case-studies/issue-7/effect-template-analysis.json +178 -0
- package/eslint.config.js +91 -0
- package/examples/basic-usage.js +64 -0
- package/experiments/test-changeset-scripts.mjs +303 -0
- package/experiments/test-failure-detection.mjs +143 -0
- package/experiments/test-format-major-changes.mjs +49 -0
- package/experiments/test-format-minor-changes.mjs +52 -0
- package/experiments/test-format-no-hash.mjs +43 -0
- package/experiments/test-format-patch-changes.mjs +46 -0
- package/package.json +80 -0
- package/scripts/changeset-version.mjs +75 -0
- package/scripts/check-changesets.mjs +67 -0
- package/scripts/check-version.mjs +129 -0
- package/scripts/create-github-release.mjs +93 -0
- package/scripts/create-manual-changeset.mjs +89 -0
- package/scripts/detect-code-changes.mjs +194 -0
- package/scripts/format-github-release.mjs +83 -0
- package/scripts/format-release-notes.mjs +219 -0
- package/scripts/instant-version-bump.mjs +172 -0
- package/scripts/js-paths.mjs +177 -0
- package/scripts/merge-changesets.mjs +263 -0
- package/scripts/publish-to-npm.mjs +302 -0
- package/scripts/setup-npm.mjs +37 -0
- package/scripts/validate-changeset.mjs +265 -0
- package/scripts/version-and-commit.mjs +284 -0
- package/src/cli.js +386 -0
- package/src/index.d.ts +255 -0
- package/src/index.js +563 -0
- package/tests/index.test.js +137 -0
|
@@ -0,0 +1,649 @@
|
|
|
1
|
+
# JavaScript/TypeScript Code Formatter Comparison (2025)
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document provides a comprehensive comparison of JavaScript/TypeScript code formatters available in 2025, focusing on their features, performance, CI integration, pre-commit hook support, and autoformatting capabilities.
|
|
6
|
+
|
|
7
|
+
**Analysis Date:** 2025-12-18
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Executive Summary
|
|
12
|
+
|
|
13
|
+
| Formatter | Primary Use Case | Speed | CI Support | Pre-commit | Autoformat | Active Development |
|
|
14
|
+
| --------------- | --------------------------------- | -------------- | ---------- | ---------- | ---------- | ------------------------ |
|
|
15
|
+
| **Prettier** | Industry standard, multi-language | Baseline | ✅ Yes | ✅ Yes | ✅ Yes | Active |
|
|
16
|
+
| **Biome** | All-in-one linter + formatter | 35-100x faster | ✅ Yes | ✅ Yes | ✅ Yes | Very Active (2025 focus) |
|
|
17
|
+
| **dprint** | Fast, focused formatter | 20-60x faster | ✅ Yes | ✅ Yes | ✅ Yes | Active |
|
|
18
|
+
| **Standard JS** | Zero-config style guide | Moderate | ✅ Yes | ✅ Yes | ✅ Yes | Maintenance mode |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Detailed Comparison
|
|
23
|
+
|
|
24
|
+
### 1. Prettier
|
|
25
|
+
|
|
26
|
+
**Website:** https://prettier.io/
|
|
27
|
+
|
|
28
|
+
#### Overview
|
|
29
|
+
|
|
30
|
+
- Opinionated code formatter with minimal configuration
|
|
31
|
+
- Industry standard with widespread adoption
|
|
32
|
+
- Supports JavaScript, TypeScript, JSX, JSON, CSS, HTML, Markdown, YAML, and more
|
|
33
|
+
- 20MB of npm dependencies
|
|
34
|
+
|
|
35
|
+
#### Performance
|
|
36
|
+
|
|
37
|
+
- Large codebases take seconds to format
|
|
38
|
+
- Adds up when formatting on every save or in pre-commit hooks
|
|
39
|
+
- Baseline for speed comparisons
|
|
40
|
+
|
|
41
|
+
#### Features
|
|
42
|
+
|
|
43
|
+
**CI Integration:**
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Check formatting
|
|
47
|
+
npx prettier --check "src/**/*.{js,ts,jsx,tsx}"
|
|
48
|
+
|
|
49
|
+
# Format files
|
|
50
|
+
npx prettier --write "src/**/*.{js,ts,jsx,tsx}"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Pre-commit Hook (using husky + lint-staged):**
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"husky": {
|
|
58
|
+
"hooks": {
|
|
59
|
+
"pre-commit": "lint-staged"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"lint-staged": {
|
|
63
|
+
"*.{js,ts,jsx,tsx}": "prettier --write"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Autoformat:**
|
|
69
|
+
|
|
70
|
+
- Format on save in VS Code
|
|
71
|
+
- CLI: `prettier --write .`
|
|
72
|
+
- Supports incremental formatting (only changed files)
|
|
73
|
+
|
|
74
|
+
#### Pros
|
|
75
|
+
|
|
76
|
+
- ✅ Mature ecosystem with extensive plugin support
|
|
77
|
+
- ✅ Works with virtually all editors and IDEs
|
|
78
|
+
- ✅ Consistent formatting across projects
|
|
79
|
+
- ✅ Large community and extensive documentation
|
|
80
|
+
- ✅ Multi-language support
|
|
81
|
+
|
|
82
|
+
#### Cons
|
|
83
|
+
|
|
84
|
+
- ❌ Slower than Rust-based alternatives
|
|
85
|
+
- ❌ Large dependency footprint
|
|
86
|
+
- ❌ Only handles formatting (requires separate linter)
|
|
87
|
+
|
|
88
|
+
#### Recommendation
|
|
89
|
+
|
|
90
|
+
**Best for:** Teams wanting a stable, well-documented, industry-standard formatter with broad language support.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### 2. Biome
|
|
95
|
+
|
|
96
|
+
**Website:** https://biomejs.dev/
|
|
97
|
+
|
|
98
|
+
#### Overview
|
|
99
|
+
|
|
100
|
+
- Modern toolchain combining linting and formatting
|
|
101
|
+
- Written in Rust for exceptional performance
|
|
102
|
+
- Replaces both ESLint and Prettier
|
|
103
|
+
- 97% compatibility with Prettier formatting
|
|
104
|
+
- **Note:** Biome is the community fork of Rome (forked August 2023)
|
|
105
|
+
|
|
106
|
+
#### Performance
|
|
107
|
+
|
|
108
|
+
- **7x faster** than Prettier on single-threaded workloads
|
|
109
|
+
- **100x faster** on multi-core systems (M1 Max with 10 cores)
|
|
110
|
+
- Significantly faster than both Prettier and dprint
|
|
111
|
+
|
|
112
|
+
#### Features
|
|
113
|
+
|
|
114
|
+
**CI Integration:**
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Check all files (formatting, linting, etc.)
|
|
118
|
+
npx @biomejs/biome ci ./src
|
|
119
|
+
|
|
120
|
+
# Check formatting only
|
|
121
|
+
npx @biomejs/biome format --check ./src
|
|
122
|
+
|
|
123
|
+
# Lint only
|
|
124
|
+
npx @biomejs/biome lint ./src
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Pre-commit Hook (using husky):**
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# With --staged flag (Biome 1.7.0+)
|
|
131
|
+
npx @biomejs/biome check --error-on-warnings --no-errors-on-unmatched --staged
|
|
132
|
+
|
|
133
|
+
# Without lint-staged needed (baked-in support)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Autoformat:**
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# Format and apply safe fixes
|
|
140
|
+
npx @biomejs/biome check --write ./src
|
|
141
|
+
|
|
142
|
+
# Format only
|
|
143
|
+
npx @biomejs/biome format --write ./src
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Configuration (biome.json):**
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"formatter": {
|
|
151
|
+
"enabled": true,
|
|
152
|
+
"indentStyle": "space"
|
|
153
|
+
},
|
|
154
|
+
"linter": {
|
|
155
|
+
"enabled": true,
|
|
156
|
+
"rules": {
|
|
157
|
+
"recommended": true
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### Pros
|
|
164
|
+
|
|
165
|
+
- ✅ **All-in-one tool** (linter + formatter + more)
|
|
166
|
+
- ✅ Exceptional performance (35-100x faster than Prettier)
|
|
167
|
+
- ✅ Single configuration file (biome.json)
|
|
168
|
+
- ✅ Built-in staged file support (no lint-staged needed)
|
|
169
|
+
- ✅ Type-aware linting (Biome 2.0+)
|
|
170
|
+
- ✅ Plugin support (2025)
|
|
171
|
+
- ✅ Very active development
|
|
172
|
+
- ✅ Simplifies toolchain (fewer dependencies)
|
|
173
|
+
|
|
174
|
+
#### Cons
|
|
175
|
+
|
|
176
|
+
- ❌ Newer tool (less mature than Prettier)
|
|
177
|
+
- ❌ Smaller community and ecosystem
|
|
178
|
+
- ❌ Missing some typescript-eslint rules (64 of 100+)
|
|
179
|
+
- ❌ No incremental formatting (formats all files)
|
|
180
|
+
- ❌ Type-checking still experimental vs. full TypeScript compiler
|
|
181
|
+
|
|
182
|
+
#### Recent Milestones
|
|
183
|
+
|
|
184
|
+
- **June 2025:** Biome v2.0 - type-aware linting, plugins, multi-file analysis
|
|
185
|
+
- **January 2024:** Biome reaches 97% Prettier compatibility
|
|
186
|
+
- **August 2023:** Forked from Rome after Rome Tools Inc. shutdown
|
|
187
|
+
|
|
188
|
+
#### Recommendation
|
|
189
|
+
|
|
190
|
+
**Best for:** Teams wanting a unified, high-performance toolchain and willing to adopt newer technology. Ideal for TypeScript projects where speed is critical.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### 3. dprint
|
|
195
|
+
|
|
196
|
+
**Website:** https://dprint.dev/
|
|
197
|
+
|
|
198
|
+
#### Overview
|
|
199
|
+
|
|
200
|
+
- Code formatter written in Rust
|
|
201
|
+
- Compiles to native binary (~15MB)
|
|
202
|
+
- Zero npm dependencies
|
|
203
|
+
- Follows Prettier's formatting principles
|
|
204
|
+
- Focused solely on formatting (does one thing well)
|
|
205
|
+
|
|
206
|
+
#### Performance
|
|
207
|
+
|
|
208
|
+
- **20-60x faster** than Prettier
|
|
209
|
+
- Entire pre-commit hook runs in **under 1 second** (~100ms for formatting)
|
|
210
|
+
- Commits feel instant
|
|
211
|
+
|
|
212
|
+
#### Features
|
|
213
|
+
|
|
214
|
+
**CI Integration:**
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# Check formatting
|
|
218
|
+
dprint check
|
|
219
|
+
|
|
220
|
+
# Format files
|
|
221
|
+
dprint fmt
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Pre-commit Hook:**
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
# Extremely fast pre-commit
|
|
228
|
+
dprint fmt --staged
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Configuration (.dprintrc.json):**
|
|
232
|
+
|
|
233
|
+
```json
|
|
234
|
+
{
|
|
235
|
+
"typescript": {
|
|
236
|
+
"lineWidth": 100
|
|
237
|
+
},
|
|
238
|
+
"json": {},
|
|
239
|
+
"markdown": {},
|
|
240
|
+
"includes": ["**/*.{ts,tsx,js,jsx,json,md}"],
|
|
241
|
+
"excludes": ["**/node_modules"]
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
#### Pros
|
|
246
|
+
|
|
247
|
+
- ✅ **Exceptional speed** (20-60x faster)
|
|
248
|
+
- ✅ **Zero npm dependencies** (single binary)
|
|
249
|
+
- ✅ Focused tool that does one thing well
|
|
250
|
+
- ✅ Nearly identical to Prettier output
|
|
251
|
+
- ✅ Supports incremental formatting
|
|
252
|
+
- ✅ Fast pre-commit experience
|
|
253
|
+
|
|
254
|
+
#### Cons
|
|
255
|
+
|
|
256
|
+
- ❌ Only handles formatting (requires separate linter)
|
|
257
|
+
- ❌ Smaller ecosystem than Prettier
|
|
258
|
+
- ❌ Less editor integration than Prettier
|
|
259
|
+
|
|
260
|
+
#### Recommendation
|
|
261
|
+
|
|
262
|
+
**Best for:** Teams wanting the fastest possible formatter with minimal dependencies, who already have a linter (ESLint) and value specialized tools.
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
### 4. Standard JS
|
|
267
|
+
|
|
268
|
+
**Website:** https://standardjs.com/
|
|
269
|
+
|
|
270
|
+
#### Overview
|
|
271
|
+
|
|
272
|
+
- Zero-configuration JavaScript style guide
|
|
273
|
+
- Combines linting and formatting
|
|
274
|
+
- No configuration files needed
|
|
275
|
+
- Opinionated rules (semicolons, 2-space indent, etc.)
|
|
276
|
+
|
|
277
|
+
#### Features
|
|
278
|
+
|
|
279
|
+
**CI Integration:**
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
# Check code
|
|
283
|
+
standard
|
|
284
|
+
|
|
285
|
+
# Auto-fix issues
|
|
286
|
+
standard --fix
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**Pre-commit Hook:**
|
|
290
|
+
|
|
291
|
+
```json
|
|
292
|
+
{
|
|
293
|
+
"husky": {
|
|
294
|
+
"hooks": {
|
|
295
|
+
"pre-commit": "standard"
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**Autoformat:**
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
standard --fix
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
#### Pros
|
|
308
|
+
|
|
309
|
+
- ✅ Zero configuration required
|
|
310
|
+
- ✅ Simple to set up
|
|
311
|
+
- ✅ Good for small projects or quick prototypes
|
|
312
|
+
- ✅ Combines linting and formatting
|
|
313
|
+
|
|
314
|
+
#### Cons
|
|
315
|
+
|
|
316
|
+
- ❌ Very opinionated (limited customization)
|
|
317
|
+
- ❌ JavaScript-only (no TypeScript without extensions)
|
|
318
|
+
- ❌ Slower than Rust-based alternatives
|
|
319
|
+
- ❌ Less active development
|
|
320
|
+
|
|
321
|
+
#### Recommendation
|
|
322
|
+
|
|
323
|
+
**Best for:** Solo developers or small projects wanting zero configuration. Not recommended for TypeScript or teams needing customization.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Feature Comparison Matrix
|
|
328
|
+
|
|
329
|
+
### Core Capabilities
|
|
330
|
+
|
|
331
|
+
| Feature | Prettier | Biome | dprint | Standard JS |
|
|
332
|
+
| -------------------------- | ----------- | ---------- | -------------- | ----------- |
|
|
333
|
+
| **Formatting** | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
|
|
334
|
+
| **Linting** | ❌ No | ✅ Yes | ❌ No | ✅ Yes |
|
|
335
|
+
| **Type Checking** | ❌ No | ⚠️ Partial | ❌ No | ❌ No |
|
|
336
|
+
| **CI Check Mode** | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
|
|
337
|
+
| **Autoformat** | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
|
|
338
|
+
| **Pre-commit Support** | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
|
|
339
|
+
| **Incremental Formatting** | ✅ Yes | ❌ No | ✅ Yes | ✅ Yes |
|
|
340
|
+
| **Configuration File** | .prettierrc | biome.json | .dprintrc.json | ❌ None |
|
|
341
|
+
|
|
342
|
+
### Language Support
|
|
343
|
+
|
|
344
|
+
| Language | Prettier | Biome | dprint | Standard JS |
|
|
345
|
+
| ---------- | -------- | ------ | ------ | ------------- |
|
|
346
|
+
| JavaScript | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
|
|
347
|
+
| TypeScript | ✅ Yes | ✅ Yes | ✅ Yes | ⚠️ Via plugin |
|
|
348
|
+
| JSX/TSX | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
|
|
349
|
+
| JSON | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No |
|
|
350
|
+
| CSS | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No |
|
|
351
|
+
| HTML | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No |
|
|
352
|
+
| Markdown | ✅ Yes | ❌ No | ✅ Yes | ❌ No |
|
|
353
|
+
|
|
354
|
+
### Performance Metrics
|
|
355
|
+
|
|
356
|
+
| Metric | Prettier | Biome | dprint | Standard JS |
|
|
357
|
+
| ---------------------- | ------------- | ------------- | ------------- | ----------- |
|
|
358
|
+
| **Speed vs Prettier** | 1x (baseline) | 7-100x faster | 20-60x faster | ~1x |
|
|
359
|
+
| **Pre-commit Time** | Seconds | Milliseconds | ~100ms | Seconds |
|
|
360
|
+
| **Dependencies** | ~20MB npm | Rust binary | ~15MB binary | npm |
|
|
361
|
+
| **Multi-core Scaling** | Limited | Excellent | Good | Limited |
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## Migration Considerations
|
|
366
|
+
|
|
367
|
+
### From Prettier to Biome
|
|
368
|
+
|
|
369
|
+
**Compatibility:** 97% compatible with Prettier output
|
|
370
|
+
|
|
371
|
+
**Steps:**
|
|
372
|
+
|
|
373
|
+
1. Install Biome: `npm install --save-dev @biomejs/biome`
|
|
374
|
+
2. Initialize config: `npx @biomejs/biome init`
|
|
375
|
+
3. Migrate settings: Use `biome migrate` command
|
|
376
|
+
4. Update CI scripts
|
|
377
|
+
5. Update pre-commit hooks
|
|
378
|
+
6. Remove Prettier and ESLint dependencies
|
|
379
|
+
|
|
380
|
+
**Benefits:**
|
|
381
|
+
|
|
382
|
+
- Faster CI runs (80% faster build pipelines reported)
|
|
383
|
+
- Simplified configuration (one tool instead of two)
|
|
384
|
+
- Better performance on large codebases
|
|
385
|
+
|
|
386
|
+
**Risks:**
|
|
387
|
+
|
|
388
|
+
- Newer tool with smaller community
|
|
389
|
+
- Some formatting edge cases may differ
|
|
390
|
+
- Missing some advanced ESLint rules
|
|
391
|
+
|
|
392
|
+
### From Prettier to dprint
|
|
393
|
+
|
|
394
|
+
**Compatibility:** Nearly identical to Prettier
|
|
395
|
+
|
|
396
|
+
**Steps:**
|
|
397
|
+
|
|
398
|
+
1. Install dprint binary
|
|
399
|
+
2. Create `.dprintrc.json`
|
|
400
|
+
3. Update CI and pre-commit scripts
|
|
401
|
+
4. Keep ESLint for linting
|
|
402
|
+
|
|
403
|
+
**Benefits:**
|
|
404
|
+
|
|
405
|
+
- Much faster formatting
|
|
406
|
+
- Zero npm dependencies
|
|
407
|
+
- Near-instant pre-commit hooks
|
|
408
|
+
|
|
409
|
+
**Risks:**
|
|
410
|
+
|
|
411
|
+
- Still need separate linter
|
|
412
|
+
- Smaller ecosystem
|
|
413
|
+
- Less editor support
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## 2025 Trends and Recommendations
|
|
418
|
+
|
|
419
|
+
### Industry Adoption
|
|
420
|
+
|
|
421
|
+
**Prettier:** Still the industry standard, used by most projects
|
|
422
|
+
|
|
423
|
+
**Biome:** Rapidly growing adoption in 2025
|
|
424
|
+
|
|
425
|
+
- Teams report 80% faster build pipelines
|
|
426
|
+
- Becoming the go-to for new TypeScript projects
|
|
427
|
+
- Strong momentum in React/Next.js communities
|
|
428
|
+
|
|
429
|
+
**dprint:** Stable niche for teams wanting speed without changing linters
|
|
430
|
+
|
|
431
|
+
### For Our Repository
|
|
432
|
+
|
|
433
|
+
**Current Setup:** ESLint + Prettier (solid, stable)
|
|
434
|
+
|
|
435
|
+
**Recommendation for 2025:**
|
|
436
|
+
|
|
437
|
+
#### Option 1: Stay with Prettier + ESLint (Conservative)
|
|
438
|
+
|
|
439
|
+
✅ **Pros:**
|
|
440
|
+
|
|
441
|
+
- Proven, stable, well-documented
|
|
442
|
+
- Extensive ecosystem
|
|
443
|
+
- Team familiarity
|
|
444
|
+
- Multi-language support
|
|
445
|
+
|
|
446
|
+
❌ **Cons:**
|
|
447
|
+
|
|
448
|
+
- Slower on large codebases
|
|
449
|
+
- Two separate tools to configure
|
|
450
|
+
|
|
451
|
+
**Best if:** Team values stability, has multi-language needs, or doesn't have performance issues
|
|
452
|
+
|
|
453
|
+
#### Option 2: Migrate to Biome (Progressive)
|
|
454
|
+
|
|
455
|
+
✅ **Pros:**
|
|
456
|
+
|
|
457
|
+
- 7-100x performance improvement
|
|
458
|
+
- Single tool for linting + formatting
|
|
459
|
+
- Active development with 2025 focus
|
|
460
|
+
- Type-aware linting
|
|
461
|
+
- Plugin support
|
|
462
|
+
|
|
463
|
+
❌ **Cons:**
|
|
464
|
+
|
|
465
|
+
- Newer tool (requires team buy-in)
|
|
466
|
+
- Some missing typescript-eslint rules
|
|
467
|
+
- Migration effort required
|
|
468
|
+
|
|
469
|
+
**Best if:** Team wants cutting-edge tooling, values performance, primarily uses JS/TS
|
|
470
|
+
|
|
471
|
+
#### Option 3: Switch to dprint + ESLint (Performance-focused)
|
|
472
|
+
|
|
473
|
+
✅ **Pros:**
|
|
474
|
+
|
|
475
|
+
- 20-60x faster formatting
|
|
476
|
+
- Zero npm dependencies
|
|
477
|
+
- Keep familiar ESLint setup
|
|
478
|
+
- Fast pre-commit hooks
|
|
479
|
+
|
|
480
|
+
❌ **Cons:**
|
|
481
|
+
|
|
482
|
+
- Still two separate tools
|
|
483
|
+
- Smaller ecosystem
|
|
484
|
+
- Less editor integration
|
|
485
|
+
|
|
486
|
+
**Best if:** Team has slow formatting issues but wants to keep ESLint
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
|
|
490
|
+
## Conclusion
|
|
491
|
+
|
|
492
|
+
### Quick Decision Guide
|
|
493
|
+
|
|
494
|
+
**Choose Prettier if:**
|
|
495
|
+
|
|
496
|
+
- You want the industry standard with maximum compatibility
|
|
497
|
+
- You need extensive multi-language support
|
|
498
|
+
- You value ecosystem maturity over performance
|
|
499
|
+
- Your team is familiar with Prettier
|
|
500
|
+
|
|
501
|
+
**Choose Biome if:**
|
|
502
|
+
|
|
503
|
+
- You want an all-in-one modern toolchain
|
|
504
|
+
- Performance is a priority (large codebase)
|
|
505
|
+
- You're willing to adopt newer technology
|
|
506
|
+
- You want to simplify your toolchain
|
|
507
|
+
|
|
508
|
+
**Choose dprint if:**
|
|
509
|
+
|
|
510
|
+
- You want maximum formatting speed
|
|
511
|
+
- You prefer specialized tools over all-in-one
|
|
512
|
+
- You're happy with your current linter
|
|
513
|
+
- You want minimal dependencies
|
|
514
|
+
|
|
515
|
+
**Choose Standard JS if:**
|
|
516
|
+
|
|
517
|
+
- You want zero configuration
|
|
518
|
+
- You have a small JavaScript-only project
|
|
519
|
+
- You're working solo or in a small team
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
## Sources
|
|
524
|
+
|
|
525
|
+
### Research Sources
|
|
526
|
+
|
|
527
|
+
1. [Biome: The Faster Lint and Formatting Alternative to Prettier](https://medium.com/navara/biome-the-faster-lint-and-formatting-alternative-to-prettier-12fcf8b122b9)
|
|
528
|
+
2. [Differences with Prettier | Biome](https://biomejs.dev/formatter/differences-with-prettier/)
|
|
529
|
+
3. [Biome, toolchain of the web](https://biomejs.dev/)
|
|
530
|
+
4. [BiomeJS - A 35x faster alternative to Prettier](https://blog.oxyconit.com/biomejs-a-35x-faster-alternative-to-prettier-for-formatting-and-linting/)
|
|
531
|
+
5. [Biome.js Replaces ESLint and Prettier: The 2025 Frontend Code Standards Revolution](https://markaicode.com/biome-js-frontend-code-standards-revolution-2025/)
|
|
532
|
+
6. [dprint: The Rust-Based Code Formatter That's 10-100x Faster Than Prettier](https://mfyz.com/dprint-rust-based-code-formatter-faster-prettier/)
|
|
533
|
+
7. [From ESLint and Prettier to Biome](https://kittygiraudel.com/2024/06/01/from-eslint-and-prettier-to-biome/)
|
|
534
|
+
8. [Prettier vs Biome: Choosing the Right Tool for Quality Code](https://www.dhiwise.com/post/prettier-vs-biome-code-quality-comparison)
|
|
535
|
+
9. [Transitioning from ESLint and Prettier to Biome: A Comprehensive Guide](https://medium.com/@yanirmanor/transitioning-from-eslint-and-prettier-to-biome-a-comprehensive-guide-fcbccb42dc2c)
|
|
536
|
+
10. [Why I Chose Biome Over ESLint+Prettier: 20x Faster Linting](https://dev.to/saswatapal/why-i-chose-biome-over-eslintprettier-20x-faster-linting-one-tool-to-rule-them-all-10kf)
|
|
537
|
+
11. [Biome formatter wins the Prettier challenge](https://biomejs.dev/blog/biome-wins-prettier-challenge/)
|
|
538
|
+
12. [Announcing Biome](https://biomejs.dev/blog/announcing-biome/)
|
|
539
|
+
13. [Biome adoption guide: Overview, examples, and alternatives](https://blog.logrocket.com/biome-adoption-guide/)
|
|
540
|
+
14. [Announcing Biome: the community fork of Rome](https://github.com/rome/tools/discussions/4787)
|
|
541
|
+
15. [Best Code Formatter for VSCode JavaScript](https://rapidfreeformatter.com/best-code-formatter-for-vscode-javascript-top-tools-for-speed-style-consistency/)
|
|
542
|
+
16. [Alternatives to Prettier – Popular Code Linting and Formatting Tools](https://www.freecodecamp.org/news/alternatives-to-prettier/)
|
|
543
|
+
|
|
544
|
+
---
|
|
545
|
+
|
|
546
|
+
## Appendix: Sample Configurations
|
|
547
|
+
|
|
548
|
+
### Prettier Configuration (.prettierrc)
|
|
549
|
+
|
|
550
|
+
```json
|
|
551
|
+
{
|
|
552
|
+
"semi": true,
|
|
553
|
+
"trailingComma": "all",
|
|
554
|
+
"singleQuote": true,
|
|
555
|
+
"printWidth": 100,
|
|
556
|
+
"tabWidth": 2
|
|
557
|
+
}
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
### Biome Configuration (biome.json)
|
|
561
|
+
|
|
562
|
+
```json
|
|
563
|
+
{
|
|
564
|
+
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
|
|
565
|
+
"vcs": {
|
|
566
|
+
"enabled": true,
|
|
567
|
+
"clientKind": "git",
|
|
568
|
+
"useIgnoreFile": true
|
|
569
|
+
},
|
|
570
|
+
"formatter": {
|
|
571
|
+
"enabled": true,
|
|
572
|
+
"indentStyle": "space",
|
|
573
|
+
"indentWidth": 2,
|
|
574
|
+
"lineWidth": 100
|
|
575
|
+
},
|
|
576
|
+
"linter": {
|
|
577
|
+
"enabled": true,
|
|
578
|
+
"rules": {
|
|
579
|
+
"recommended": true,
|
|
580
|
+
"complexity": {
|
|
581
|
+
"noExtraBooleanCast": "error",
|
|
582
|
+
"noMultipleSpacesInRegularExpressionLiterals": "error",
|
|
583
|
+
"noUselessCatch": "error",
|
|
584
|
+
"noUselessTypeConstraint": "error",
|
|
585
|
+
"noWith": "error"
|
|
586
|
+
},
|
|
587
|
+
"correctness": {
|
|
588
|
+
"noConstAssign": "error",
|
|
589
|
+
"noConstantCondition": "error",
|
|
590
|
+
"noEmptyCharacterClassInRegex": "error",
|
|
591
|
+
"noEmptyPattern": "error",
|
|
592
|
+
"noGlobalObjectCalls": "error",
|
|
593
|
+
"noInvalidConstructorSuper": "error",
|
|
594
|
+
"noInvalidNewBuiltin": "error",
|
|
595
|
+
"noNonoctalDecimalEscape": "error",
|
|
596
|
+
"noPrecisionLoss": "error",
|
|
597
|
+
"noSelfAssign": "error",
|
|
598
|
+
"noSetterReturn": "error",
|
|
599
|
+
"noSwitchDeclarations": "error",
|
|
600
|
+
"noUndeclaredVariables": "error",
|
|
601
|
+
"noUnreachable": "error",
|
|
602
|
+
"noUnreachableSuper": "error",
|
|
603
|
+
"noUnsafeFinally": "error",
|
|
604
|
+
"noUnsafeOptionalChaining": "error",
|
|
605
|
+
"noUnusedLabels": "error",
|
|
606
|
+
"noUnusedVariables": "error",
|
|
607
|
+
"useIsNan": "error",
|
|
608
|
+
"useValidForDirection": "error",
|
|
609
|
+
"useYield": "error"
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
},
|
|
613
|
+
"javascript": {
|
|
614
|
+
"formatter": {
|
|
615
|
+
"quoteStyle": "single",
|
|
616
|
+
"semicolons": "always",
|
|
617
|
+
"trailingCommas": "all"
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
### dprint Configuration (.dprintrc.json)
|
|
624
|
+
|
|
625
|
+
```json
|
|
626
|
+
{
|
|
627
|
+
"typescript": {
|
|
628
|
+
"lineWidth": 100,
|
|
629
|
+
"indentWidth": 2,
|
|
630
|
+
"useTabs": false,
|
|
631
|
+
"semiColons": "always",
|
|
632
|
+
"quoteStyle": "alwaysSingle",
|
|
633
|
+
"trailingCommas": "always"
|
|
634
|
+
},
|
|
635
|
+
"json": {
|
|
636
|
+
"indentWidth": 2
|
|
637
|
+
},
|
|
638
|
+
"markdown": {
|
|
639
|
+
"lineWidth": 100
|
|
640
|
+
},
|
|
641
|
+
"includes": ["**/*.{ts,tsx,js,jsx,json,md}"],
|
|
642
|
+
"excludes": ["**/node_modules", "**/*-lock.json", "**/dist", "**/build"],
|
|
643
|
+
"plugins": [
|
|
644
|
+
"https://plugins.dprint.dev/typescript-0.91.6.wasm",
|
|
645
|
+
"https://plugins.dprint.dev/json-0.19.3.wasm",
|
|
646
|
+
"https://plugins.dprint.dev/markdown-0.17.2.wasm"
|
|
647
|
+
]
|
|
648
|
+
}
|
|
649
|
+
```
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"repository": "https://github.com/link-foundation/js-ai-driven-development-pipeline-template",
|
|
3
|
+
"analysis_date": "2025-12-18",
|
|
4
|
+
"description": "A JavaScript/TypeScript package template for AI-driven development",
|
|
5
|
+
"package_manager": "npm",
|
|
6
|
+
"configuration_files": {
|
|
7
|
+
"build_and_development": ["package.json", "bunfig.toml", "deno.json"],
|
|
8
|
+
"code_quality": ["eslint.config.js", ".prettierrc", ".prettierignore"],
|
|
9
|
+
"git_hooks": [".husky/pre-commit"],
|
|
10
|
+
"changesets": [".changeset/config.json"]
|
|
11
|
+
},
|
|
12
|
+
"github_workflows": {
|
|
13
|
+
"release.yml": {
|
|
14
|
+
"triggers": ["push to main", "pull_request", "workflow_dispatch"],
|
|
15
|
+
"jobs": [
|
|
16
|
+
"changeset-check",
|
|
17
|
+
"lint",
|
|
18
|
+
"test",
|
|
19
|
+
"release",
|
|
20
|
+
"instant-release",
|
|
21
|
+
"changeset-pr"
|
|
22
|
+
],
|
|
23
|
+
"test_matrix": "3 runtimes x 3 OS = 9 combinations"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"eslint_rules": {
|
|
27
|
+
"base_configs": ["@eslint/js recommended", "prettier"],
|
|
28
|
+
"rules": {
|
|
29
|
+
"prettier_integration": true,
|
|
30
|
+
"no_unused_vars": "error",
|
|
31
|
+
"no_console": "off",
|
|
32
|
+
"no_debugger": "error",
|
|
33
|
+
"eqeqeq": "always",
|
|
34
|
+
"curly": "all",
|
|
35
|
+
"no_var": true,
|
|
36
|
+
"prefer_const": true,
|
|
37
|
+
"prefer_arrow_callback": true,
|
|
38
|
+
"no_duplicate_imports": true,
|
|
39
|
+
"object_shorthand": true,
|
|
40
|
+
"prefer_template": true
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"prettier_config": {
|
|
44
|
+
"semi": true,
|
|
45
|
+
"trailingComma": "es5",
|
|
46
|
+
"singleQuote": true,
|
|
47
|
+
"printWidth": 80,
|
|
48
|
+
"tabWidth": 2,
|
|
49
|
+
"useTabs": false,
|
|
50
|
+
"arrowParens": "always",
|
|
51
|
+
"endOfLine": "lf"
|
|
52
|
+
},
|
|
53
|
+
"features": {
|
|
54
|
+
"multi_runtime_support": ["Node.js", "Bun", "Deno"],
|
|
55
|
+
"test_framework": "test-anywhere",
|
|
56
|
+
"release_automation": "Changesets",
|
|
57
|
+
"code_quality": ["ESLint", "Prettier", "Husky", "lint-staged"],
|
|
58
|
+
"file_size_limit": "1000 lines"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": [
|
|
61
|
+
"@changesets/cli",
|
|
62
|
+
"eslint",
|
|
63
|
+
"eslint-config-prettier",
|
|
64
|
+
"eslint-plugin-prettier",
|
|
65
|
+
"husky",
|
|
66
|
+
"lint-staged",
|
|
67
|
+
"prettier",
|
|
68
|
+
"test-anywhere"
|
|
69
|
+
]
|
|
70
|
+
}
|