@openrewrite/rewrite 8.69.0-20251207-220615 → 8.69.0-20251207-230203
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/dist/javascript/autodetect.d.ts +45 -0
- package/dist/javascript/autodetect.d.ts.map +1 -0
- package/dist/javascript/autodetect.js +303 -0
- package/dist/javascript/autodetect.js.map +1 -0
- package/dist/javascript/format.d.ts +12 -2
- package/dist/javascript/format.d.ts.map +1 -1
- package/dist/javascript/format.js +37 -13
- package/dist/javascript/format.js.map +1 -1
- package/dist/javascript/index.d.ts +1 -0
- package/dist/javascript/index.d.ts.map +1 -1
- package/dist/javascript/index.js +1 -0
- package/dist/javascript/index.js.map +1 -1
- package/dist/javascript/recipes/auto-format.d.ts +25 -13
- package/dist/javascript/recipes/auto-format.d.ts.map +1 -1
- package/dist/javascript/recipes/auto-format.js +38 -13
- package/dist/javascript/recipes/auto-format.js.map +1 -1
- package/dist/javascript/style.d.ts +9 -0
- package/dist/javascript/style.d.ts.map +1 -1
- package/dist/javascript/style.js +30 -0
- package/dist/javascript/style.js.map +1 -1
- package/dist/test/rewrite-test.d.ts +17 -0
- package/dist/test/rewrite-test.d.ts.map +1 -1
- package/dist/test/rewrite-test.js +1 -0
- package/dist/test/rewrite-test.js.map +1 -1
- package/dist/version.txt +1 -1
- package/package.json +1 -1
- package/src/javascript/autodetect.ts +302 -0
- package/src/javascript/format.ts +42 -22
- package/src/javascript/index.ts +1 -0
- package/src/javascript/recipes/auto-format.ts +49 -14
- package/src/javascript/style.ts +32 -0
- package/src/test/rewrite-test.ts +1 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { NamedStyles, Style } from "../style";
|
|
2
|
+
import { SourceFile } from "../tree";
|
|
3
|
+
import { JS } from "./tree";
|
|
4
|
+
import { SpacesStyle, TabsAndIndentsStyle, WrappingAndBracesStyle } from "./style";
|
|
5
|
+
/**
|
|
6
|
+
* Auto-detected styles for JavaScript/TypeScript code.
|
|
7
|
+
* Focuses on key formatting variations where projects differ:
|
|
8
|
+
* - Tabs vs spaces
|
|
9
|
+
* - Indent size (2, 4, etc.)
|
|
10
|
+
* - Spaces within ES6 import/export braces
|
|
11
|
+
*/
|
|
12
|
+
export declare class Autodetect implements NamedStyles {
|
|
13
|
+
readonly kind: "org.openrewrite.marker.NamedStyles";
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly name = "org.openrewrite.javascript.Autodetect";
|
|
16
|
+
readonly displayName = "Auto-detected";
|
|
17
|
+
readonly description = "Automatically detect styles from a repository's existing code.";
|
|
18
|
+
readonly tags: string[];
|
|
19
|
+
readonly styles: Style[];
|
|
20
|
+
constructor(id: string, styles: Style[]);
|
|
21
|
+
static detector(): Detector;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Collects formatting statistics from source files and builds auto-detected styles.
|
|
25
|
+
*/
|
|
26
|
+
export declare class Detector {
|
|
27
|
+
private readonly tabsAndIndentsStats;
|
|
28
|
+
private readonly spacesStats;
|
|
29
|
+
/**
|
|
30
|
+
* Sample a source file to collect formatting statistics.
|
|
31
|
+
*/
|
|
32
|
+
sample(sourceFile: SourceFile): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Sample a JavaScript/TypeScript compilation unit.
|
|
35
|
+
*/
|
|
36
|
+
sampleJavaScript(cu: JS.CompilationUnit): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Build the auto-detected styles from collected statistics.
|
|
39
|
+
*/
|
|
40
|
+
build(): Autodetect;
|
|
41
|
+
getTabsAndIndentsStyle(): TabsAndIndentsStyle;
|
|
42
|
+
getSpacesStyle(): SpacesStyle;
|
|
43
|
+
getWrappingAndBracesStyle(): WrappingAndBracesStyle;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=autodetect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autodetect.d.ts","sourceRoot":"","sources":["../../src/javascript/autodetect.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,WAAW,EAAE,KAAK,EAAC,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AACnC,OAAO,EAAC,EAAE,EAAC,MAAM,QAAQ,CAAC;AAG1B,OAAO,EAEH,WAAW,EAEX,mBAAmB,EACnB,sBAAsB,EAEzB,MAAM,SAAS,CAAC;AAEjB;;;;;;GAMG;AACH,qBAAa,UAAW,YAAW,WAAW;IAC1C,QAAQ,CAAC,IAAI,EAAG,oCAAoC,CAAU;IAC9D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,2CAA2C;IACxD,QAAQ,CAAC,WAAW,mBAAmB;IACvC,QAAQ,CAAC,WAAW,oEAAoE;IACxF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAM;IAC7B,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;gBAEb,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;IAKvC,MAAM,CAAC,QAAQ,IAAI,QAAQ;CAG9B;AAED;;GAEG;AACH,qBAAa,QAAQ;IACjB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkC;IACtE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IAEtD;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD;;OAEG;IACG,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D;;OAEG;IACH,KAAK,IAAI,UAAU;IAQnB,sBAAsB,IAAI,mBAAmB;IAI7C,cAAc,IAAI,WAAW;IAI7B,yBAAyB,IAAI,sBAAsB;CAStD"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2025 the original author or authors.
|
|
4
|
+
* <p>
|
|
5
|
+
* Licensed under the Moderne Source Available License (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
* <p>
|
|
9
|
+
* https://docs.moderne.io/licensing/moderne-source-available-license
|
|
10
|
+
* <p>
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.Detector = exports.Autodetect = void 0;
|
|
28
|
+
const uuid_1 = require("../uuid");
|
|
29
|
+
const tree_1 = require("./tree");
|
|
30
|
+
const visitor_1 = require("./visitor");
|
|
31
|
+
const style_1 = require("./style");
|
|
32
|
+
/**
|
|
33
|
+
* Auto-detected styles for JavaScript/TypeScript code.
|
|
34
|
+
* Focuses on key formatting variations where projects differ:
|
|
35
|
+
* - Tabs vs spaces
|
|
36
|
+
* - Indent size (2, 4, etc.)
|
|
37
|
+
* - Spaces within ES6 import/export braces
|
|
38
|
+
*/
|
|
39
|
+
class Autodetect {
|
|
40
|
+
constructor(id, styles) {
|
|
41
|
+
this.kind = "org.openrewrite.marker.NamedStyles";
|
|
42
|
+
this.name = "org.openrewrite.javascript.Autodetect";
|
|
43
|
+
this.displayName = "Auto-detected";
|
|
44
|
+
this.description = "Automatically detect styles from a repository's existing code.";
|
|
45
|
+
this.tags = [];
|
|
46
|
+
this.id = id;
|
|
47
|
+
this.styles = styles;
|
|
48
|
+
}
|
|
49
|
+
static detector() {
|
|
50
|
+
return new Detector();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.Autodetect = Autodetect;
|
|
54
|
+
/**
|
|
55
|
+
* Collects formatting statistics from source files and builds auto-detected styles.
|
|
56
|
+
*/
|
|
57
|
+
class Detector {
|
|
58
|
+
constructor() {
|
|
59
|
+
this.tabsAndIndentsStats = new TabsAndIndentsStatistics();
|
|
60
|
+
this.spacesStats = new SpacesStatistics();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Sample a source file to collect formatting statistics.
|
|
64
|
+
*/
|
|
65
|
+
sample(sourceFile) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
if (sourceFile.kind === tree_1.JS.Kind.CompilationUnit) {
|
|
68
|
+
yield this.sampleJavaScript(sourceFile);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Sample a JavaScript/TypeScript compilation unit.
|
|
74
|
+
*/
|
|
75
|
+
sampleJavaScript(cu) {
|
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
+
yield new FindIndentVisitor(this.tabsAndIndentsStats).visit(cu, {});
|
|
78
|
+
yield new FindSpacesVisitor(this.spacesStats).visit(cu, {});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build the auto-detected styles from collected statistics.
|
|
83
|
+
*/
|
|
84
|
+
build() {
|
|
85
|
+
return new Autodetect((0, uuid_1.randomId)(), [
|
|
86
|
+
this.tabsAndIndentsStats.getTabsAndIndentsStyle(),
|
|
87
|
+
this.spacesStats.getSpacesStyle(),
|
|
88
|
+
this.getWrappingAndBracesStyle(),
|
|
89
|
+
]);
|
|
90
|
+
}
|
|
91
|
+
getTabsAndIndentsStyle() {
|
|
92
|
+
return this.tabsAndIndentsStats.getTabsAndIndentsStyle();
|
|
93
|
+
}
|
|
94
|
+
getSpacesStyle() {
|
|
95
|
+
return this.spacesStats.getSpacesStyle();
|
|
96
|
+
}
|
|
97
|
+
getWrappingAndBracesStyle() {
|
|
98
|
+
return {
|
|
99
|
+
kind: style_1.StyleKind.WrappingAndBracesStyle,
|
|
100
|
+
ifStatement: {
|
|
101
|
+
kind: style_1.WrappingAndBracesStyleDetailKind.WrappingAndBracesStyleIfStatement,
|
|
102
|
+
elseOnNewLine: false
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.Detector = Detector;
|
|
108
|
+
// ============================================================================
|
|
109
|
+
// Statistics Classes
|
|
110
|
+
// ============================================================================
|
|
111
|
+
/**
|
|
112
|
+
* Tracks indentation patterns to detect tabs vs spaces and indent size.
|
|
113
|
+
*/
|
|
114
|
+
class TabsAndIndentsStatistics {
|
|
115
|
+
constructor() {
|
|
116
|
+
this.totalSpaceIndents = 0;
|
|
117
|
+
this.totalTabIndents = 0;
|
|
118
|
+
// Track all observed indent sizes to compute GCD
|
|
119
|
+
this.observedIndents = [];
|
|
120
|
+
}
|
|
121
|
+
recordSpaceIndent(spaceCount) {
|
|
122
|
+
this.totalSpaceIndents++;
|
|
123
|
+
if (spaceCount > 0) {
|
|
124
|
+
this.observedIndents.push(spaceCount);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
recordTabIndent() {
|
|
128
|
+
this.totalTabIndents++;
|
|
129
|
+
}
|
|
130
|
+
getTabsAndIndentsStyle() {
|
|
131
|
+
// Determine if using tabs or spaces
|
|
132
|
+
const useTabs = this.totalTabIndents > this.totalSpaceIndents;
|
|
133
|
+
// Find indent size by computing GCD of all observed indents
|
|
134
|
+
// This correctly handles 2-space files where we see 2, 4, 6, 8... (all multiples of 2)
|
|
135
|
+
let detectedIndentSize = 4; // Default
|
|
136
|
+
if (this.observedIndents.length > 0) {
|
|
137
|
+
// Compute GCD of all observed indents
|
|
138
|
+
let gcd = this.observedIndents[0];
|
|
139
|
+
for (let i = 1; i < this.observedIndents.length; i++) {
|
|
140
|
+
gcd = this.computeGcd(gcd, this.observedIndents[i]);
|
|
141
|
+
if (gcd === 1)
|
|
142
|
+
break; // Can't get smaller than 1
|
|
143
|
+
}
|
|
144
|
+
// Only use common indent sizes (2, 4, 8)
|
|
145
|
+
if (gcd === 2 || gcd === 4 || gcd === 8) {
|
|
146
|
+
detectedIndentSize = gcd;
|
|
147
|
+
}
|
|
148
|
+
else if (gcd > 0 && gcd % 4 === 0) {
|
|
149
|
+
detectedIndentSize = 4;
|
|
150
|
+
}
|
|
151
|
+
else if (gcd > 0 && gcd % 2 === 0) {
|
|
152
|
+
detectedIndentSize = 2;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
kind: style_1.StyleKind.TabsAndIndentsStyle,
|
|
157
|
+
useTabCharacter: useTabs,
|
|
158
|
+
tabSize: 4,
|
|
159
|
+
indentSize: detectedIndentSize,
|
|
160
|
+
continuationIndent: detectedIndentSize * 2,
|
|
161
|
+
keepIndentsOnEmptyLines: false,
|
|
162
|
+
indentChainedMethods: true,
|
|
163
|
+
indentAllChainedCallsInAGroup: false
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
computeGcd(a, b) {
|
|
167
|
+
while (b !== 0) {
|
|
168
|
+
const temp = b;
|
|
169
|
+
b = a % b;
|
|
170
|
+
a = temp;
|
|
171
|
+
}
|
|
172
|
+
return a;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Tracks spacing patterns around ES6 import/export braces.
|
|
177
|
+
*/
|
|
178
|
+
class SpacesStatistics {
|
|
179
|
+
constructor() {
|
|
180
|
+
// Track spaces within ES6 import/export braces: { a } vs {a}
|
|
181
|
+
this.es6ImportExportBracesWithSpace = 0;
|
|
182
|
+
this.es6ImportExportBracesWithoutSpace = 0;
|
|
183
|
+
}
|
|
184
|
+
getSpacesStyle() {
|
|
185
|
+
// Use TypeScript defaults as base since most modern JS/TS projects use similar conventions
|
|
186
|
+
// TypeScript defaults include afterTypeReferenceColon: true which is commonly expected
|
|
187
|
+
const defaults = style_1.IntelliJ.TypeScript.spaces();
|
|
188
|
+
return Object.assign(Object.assign({}, defaults), { within: Object.assign(Object.assign({}, defaults.within), { es6ImportExportBraces: this.es6ImportExportBracesWithSpace > this.es6ImportExportBracesWithoutSpace }) });
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// ============================================================================
|
|
192
|
+
// Visitor Classes for Collecting Statistics
|
|
193
|
+
// ============================================================================
|
|
194
|
+
/**
|
|
195
|
+
* Detects indentation patterns by examining block contents.
|
|
196
|
+
*/
|
|
197
|
+
class FindIndentVisitor extends visitor_1.JavaScriptVisitor {
|
|
198
|
+
constructor(stats) {
|
|
199
|
+
super();
|
|
200
|
+
this.stats = stats;
|
|
201
|
+
}
|
|
202
|
+
visitBlock(block, p) {
|
|
203
|
+
const _super = Object.create(null, {
|
|
204
|
+
visitBlock: { get: () => super.visitBlock }
|
|
205
|
+
});
|
|
206
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
207
|
+
var _a;
|
|
208
|
+
// Check indentation of statements in the block
|
|
209
|
+
for (const stmt of block.statements) {
|
|
210
|
+
const whitespace = (_a = stmt.element.prefix) === null || _a === void 0 ? void 0 : _a.whitespace;
|
|
211
|
+
if (whitespace) {
|
|
212
|
+
this.analyzeIndent(whitespace);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return _super.visitBlock.call(this, block, p);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
analyzeIndent(whitespace) {
|
|
219
|
+
const newlineIndex = whitespace.lastIndexOf('\n');
|
|
220
|
+
if (newlineIndex < 0)
|
|
221
|
+
return;
|
|
222
|
+
const indent = whitespace.substring(newlineIndex + 1);
|
|
223
|
+
if (indent.length === 0)
|
|
224
|
+
return;
|
|
225
|
+
// Check first character to determine type
|
|
226
|
+
if (indent[0] === '\t') {
|
|
227
|
+
this.stats.recordTabIndent();
|
|
228
|
+
}
|
|
229
|
+
else if (indent[0] === ' ') {
|
|
230
|
+
// Count consecutive spaces
|
|
231
|
+
let spaceCount = 0;
|
|
232
|
+
for (const char of indent) {
|
|
233
|
+
if (char === ' ')
|
|
234
|
+
spaceCount++;
|
|
235
|
+
else
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
if (spaceCount > 0) {
|
|
239
|
+
this.stats.recordSpaceIndent(spaceCount);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Detects spacing patterns in imports and exports.
|
|
246
|
+
*/
|
|
247
|
+
class FindSpacesVisitor extends visitor_1.JavaScriptVisitor {
|
|
248
|
+
constructor(stats) {
|
|
249
|
+
super();
|
|
250
|
+
this.stats = stats;
|
|
251
|
+
}
|
|
252
|
+
visitImportDeclaration(import_, p) {
|
|
253
|
+
const _super = Object.create(null, {
|
|
254
|
+
visitImportDeclaration: { get: () => super.visitImportDeclaration }
|
|
255
|
+
});
|
|
256
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
257
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
258
|
+
// Check ES6 import braces spacing: import { a } from 'x' vs import {a} from 'x'
|
|
259
|
+
if (((_b = (_a = import_.importClause) === null || _a === void 0 ? void 0 : _a.namedBindings) === null || _b === void 0 ? void 0 : _b.kind) === tree_1.JS.Kind.NamedImports) {
|
|
260
|
+
const namedImports = import_.importClause.namedBindings;
|
|
261
|
+
if (namedImports.elements.elements.length > 0) {
|
|
262
|
+
const firstElement = namedImports.elements.elements[0];
|
|
263
|
+
const hasSpaceAfterOpenBrace = (_e = (_d = (_c = firstElement.element.prefix) === null || _c === void 0 ? void 0 : _c.whitespace) === null || _d === void 0 ? void 0 : _d.includes(' ')) !== null && _e !== void 0 ? _e : false;
|
|
264
|
+
const lastElement = namedImports.elements.elements[namedImports.elements.elements.length - 1];
|
|
265
|
+
const hasSpaceBeforeCloseBrace = (_h = (_g = (_f = lastElement.after) === null || _f === void 0 ? void 0 : _f.whitespace) === null || _g === void 0 ? void 0 : _g.includes(' ')) !== null && _h !== void 0 ? _h : false;
|
|
266
|
+
if (hasSpaceAfterOpenBrace || hasSpaceBeforeCloseBrace) {
|
|
267
|
+
this.stats.es6ImportExportBracesWithSpace++;
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
this.stats.es6ImportExportBracesWithoutSpace++;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return _super.visitImportDeclaration.call(this, import_, p);
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
visitExportDeclaration(export_, p) {
|
|
278
|
+
const _super = Object.create(null, {
|
|
279
|
+
visitExportDeclaration: { get: () => super.visitExportDeclaration }
|
|
280
|
+
});
|
|
281
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
282
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
283
|
+
// Check ES6 export braces spacing
|
|
284
|
+
if (((_a = export_.exportClause) === null || _a === void 0 ? void 0 : _a.kind) === tree_1.JS.Kind.NamedExports) {
|
|
285
|
+
const namedExports = export_.exportClause;
|
|
286
|
+
if (namedExports.elements.elements.length > 0) {
|
|
287
|
+
const firstElement = namedExports.elements.elements[0];
|
|
288
|
+
const hasSpaceAfterOpenBrace = (_d = (_c = (_b = firstElement.element.prefix) === null || _b === void 0 ? void 0 : _b.whitespace) === null || _c === void 0 ? void 0 : _c.includes(' ')) !== null && _d !== void 0 ? _d : false;
|
|
289
|
+
const lastElement = namedExports.elements.elements[namedExports.elements.elements.length - 1];
|
|
290
|
+
const hasSpaceBeforeCloseBrace = (_g = (_f = (_e = lastElement.after) === null || _e === void 0 ? void 0 : _e.whitespace) === null || _f === void 0 ? void 0 : _f.includes(' ')) !== null && _g !== void 0 ? _g : false;
|
|
291
|
+
if (hasSpaceAfterOpenBrace || hasSpaceBeforeCloseBrace) {
|
|
292
|
+
this.stats.es6ImportExportBracesWithSpace++;
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
this.stats.es6ImportExportBracesWithoutSpace++;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return _super.visitExportDeclaration.call(this, export_, p);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=autodetect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autodetect.js","sourceRoot":"","sources":["../../src/javascript/autodetect.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,22 @@ import { JavaScriptVisitor } from "./visitor";
|
|
|
3
3
|
import { J, Statement } from "../java";
|
|
4
4
|
import { Cursor, Tree } from "../tree";
|
|
5
5
|
import { BlankLinesStyle, SpacesStyle, WrappingAndBracesStyle } from "./style";
|
|
6
|
+
import { NamedStyles } from "../style";
|
|
6
7
|
export { TabsAndIndentsVisitor } from "./tabs-and-indents-visitor";
|
|
7
8
|
export declare const maybeAutoFormat: <J2 extends J, P>(before: J2, after: J2, p: P, stopAfter?: J, parent?: Cursor) => Promise<J2>;
|
|
8
|
-
export declare const autoFormat: <J2 extends J, P>(j: J2, p: P, stopAfter?: J, parent?: Cursor) => Promise<J2>;
|
|
9
|
+
export declare const autoFormat: <J2 extends J, P>(j: J2, p: P, stopAfter?: J, parent?: Cursor, styles?: NamedStyles[]) => Promise<J2>;
|
|
10
|
+
/**
|
|
11
|
+
* Formats JavaScript/TypeScript code using a comprehensive set of formatting rules.
|
|
12
|
+
*
|
|
13
|
+
* Style resolution order (first match wins):
|
|
14
|
+
* 1. Styles passed to the constructor
|
|
15
|
+
* 2. Styles from source file markers (NamedStyles)
|
|
16
|
+
* 3. IntelliJ defaults
|
|
17
|
+
*/
|
|
9
18
|
export declare class AutoformatVisitor<P> extends JavaScriptVisitor<P> {
|
|
10
19
|
private stopAfter?;
|
|
11
|
-
|
|
20
|
+
private readonly styles?;
|
|
21
|
+
constructor(stopAfter?: Tree | undefined, styles?: NamedStyles[]);
|
|
12
22
|
visit<R extends J>(tree: Tree, p: P, cursor?: Cursor): Promise<R | undefined>;
|
|
13
23
|
}
|
|
14
24
|
export declare class NormalizeWhitespaceVisitor<P> extends JavaScriptVisitor<P> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/javascript/format.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,EAAE,EAAC,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAU,CAAC,EAAyC,SAAS,EAAC,MAAM,SAAS,CAAC;AAErF,OAAO,EAAC,MAAM,EAAW,IAAI,EAAC,MAAM,SAAS,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/javascript/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,22 +43,31 @@ const maybeAutoFormat = (before, after, p, stopAfter, parent) => __awaiter(void
|
|
|
43
43
|
return after;
|
|
44
44
|
});
|
|
45
45
|
exports.maybeAutoFormat = maybeAutoFormat;
|
|
46
|
-
const autoFormat = (j, p, stopAfter, parent) => __awaiter(void 0, void 0, void 0, function* () { return yield new AutoformatVisitor(stopAfter).visit(j, p, parent); });
|
|
46
|
+
const autoFormat = (j, p, stopAfter, parent, styles) => __awaiter(void 0, void 0, void 0, function* () { return yield new AutoformatVisitor(stopAfter, styles).visit(j, p, parent); });
|
|
47
47
|
exports.autoFormat = autoFormat;
|
|
48
|
+
/**
|
|
49
|
+
* Formats JavaScript/TypeScript code using a comprehensive set of formatting rules.
|
|
50
|
+
*
|
|
51
|
+
* Style resolution order (first match wins):
|
|
52
|
+
* 1. Styles passed to the constructor
|
|
53
|
+
* 2. Styles from source file markers (NamedStyles)
|
|
54
|
+
* 3. IntelliJ defaults
|
|
55
|
+
*/
|
|
48
56
|
class AutoformatVisitor extends visitor_1.JavaScriptVisitor {
|
|
49
|
-
constructor(stopAfter) {
|
|
57
|
+
constructor(stopAfter, styles) {
|
|
50
58
|
super();
|
|
51
59
|
this.stopAfter = stopAfter;
|
|
60
|
+
this.styles = styles;
|
|
52
61
|
}
|
|
53
62
|
visit(tree, p, cursor) {
|
|
54
63
|
return __awaiter(this, void 0, void 0, function* () {
|
|
55
64
|
const visitors = [
|
|
56
65
|
new NormalizeWhitespaceVisitor(this.stopAfter),
|
|
57
66
|
new MinimumViableSpacingVisitor(this.stopAfter),
|
|
58
|
-
new BlankLinesVisitor((0, style_1.
|
|
59
|
-
new WrappingAndBracesVisitor((0, style_1.
|
|
60
|
-
new SpacesVisitor((0, style_1.
|
|
61
|
-
new tabs_and_indents_visitor_1.TabsAndIndentsVisitor((0, style_1.
|
|
67
|
+
new BlankLinesVisitor((0, style_1.getStyle)(style_1.StyleKind.BlankLinesStyle, tree, this.styles), this.stopAfter),
|
|
68
|
+
new WrappingAndBracesVisitor((0, style_1.getStyle)(style_1.StyleKind.WrappingAndBracesStyle, tree, this.styles), this.stopAfter),
|
|
69
|
+
new SpacesVisitor((0, style_1.getStyle)(style_1.StyleKind.SpacesStyle, tree, this.styles), this.stopAfter),
|
|
70
|
+
new tabs_and_indents_visitor_1.TabsAndIndentsVisitor((0, style_1.getStyle)(style_1.StyleKind.TabsAndIndentsStyle, tree, this.styles), this.stopAfter),
|
|
62
71
|
];
|
|
63
72
|
let t = tree;
|
|
64
73
|
for (const visitor of visitors) {
|
|
@@ -282,8 +291,13 @@ class SpacesVisitor extends visitor_1.JavaScriptVisitor {
|
|
|
282
291
|
if (draft.exportClause.kind == tree_1.JS.Kind.NamedExports) {
|
|
283
292
|
const ne = draft.exportClause;
|
|
284
293
|
if (ne.elements.elements.length > 0) {
|
|
285
|
-
|
|
286
|
-
ne.elements.elements
|
|
294
|
+
// Check if this is a multi-line export (any element's prefix has a newline)
|
|
295
|
+
const isMultiLine = ne.elements.elements.some(e => e.element.prefix.whitespace.includes("\n"));
|
|
296
|
+
// Only adjust brace spacing for single-line exports
|
|
297
|
+
if (!isMultiLine) {
|
|
298
|
+
ne.elements.elements[0].element.prefix.whitespace = this.style.within.es6ImportExportBraces ? " " : "";
|
|
299
|
+
ne.elements.elements[ne.elements.elements.length - 1].after.whitespace = this.style.within.es6ImportExportBraces ? " " : "";
|
|
300
|
+
}
|
|
287
301
|
}
|
|
288
302
|
}
|
|
289
303
|
}
|
|
@@ -355,8 +369,13 @@ class SpacesVisitor extends visitor_1.JavaScriptVisitor {
|
|
|
355
369
|
draft.importClause.namedBindings.prefix.whitespace = " ";
|
|
356
370
|
if (draft.importClause.namedBindings.kind == tree_1.JS.Kind.NamedImports) {
|
|
357
371
|
const ni = draft.importClause.namedBindings;
|
|
358
|
-
|
|
359
|
-
ni.elements.elements
|
|
372
|
+
// Check if this is a multi-line import (any element's prefix has a newline)
|
|
373
|
+
const isMultiLine = ni.elements.elements.some(e => e.element.prefix.whitespace.includes("\n"));
|
|
374
|
+
// Only adjust brace spacing for single-line imports
|
|
375
|
+
if (!isMultiLine) {
|
|
376
|
+
ni.elements.elements[0].element.prefix.whitespace = this.style.within.es6ImportExportBraces ? " " : "";
|
|
377
|
+
ni.elements.elements[ni.elements.elements.length - 1].after.whitespace = this.style.within.es6ImportExportBraces ? " " : "";
|
|
378
|
+
}
|
|
360
379
|
}
|
|
361
380
|
}
|
|
362
381
|
}
|
|
@@ -443,9 +462,14 @@ class SpacesVisitor extends visitor_1.JavaScriptVisitor {
|
|
|
443
462
|
});
|
|
444
463
|
return __awaiter(this, void 0, void 0, function* () {
|
|
445
464
|
const pa = yield _super.visitPropertyAssignment.call(this, propertyAssignment, p);
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
465
|
+
// Only adjust the space before the colon if there's an initializer (not a shorthand property)
|
|
466
|
+
// For shorthand properties like { headers }, name.after.whitespace is the space before }
|
|
467
|
+
if (pa.initializer) {
|
|
468
|
+
return (0, visitor_2.produceAsync)(pa, draft => {
|
|
469
|
+
draft.name.after.whitespace = this.style.other.beforePropertyNameValueSeparator ? " " : "";
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
return pa;
|
|
449
473
|
});
|
|
450
474
|
}
|
|
451
475
|
visitSwitch(switchNode, p) {
|