@openrewrite/recipes-code-quality 0.1.0-20260409-154017

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.
Files changed (51) hide show
  1. package/dist/all-branches-identical.d.ts +10 -0
  2. package/dist/all-branches-identical.d.ts.map +1 -0
  3. package/dist/all-branches-identical.js +116 -0
  4. package/dist/all-branches-identical.js.map +1 -0
  5. package/dist/boolean-checks-not-inverted.d.ts +10 -0
  6. package/dist/boolean-checks-not-inverted.d.ts.map +1 -0
  7. package/dist/boolean-checks-not-inverted.js +117 -0
  8. package/dist/boolean-checks-not-inverted.js.map +1 -0
  9. package/dist/collapsible-if-statements.d.ts +10 -0
  10. package/dist/collapsible-if-statements.d.ts.map +1 -0
  11. package/dist/collapsible-if-statements.js +119 -0
  12. package/dist/collapsible-if-statements.js.map +1 -0
  13. package/dist/index.d.ts +13 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +55 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/merge-identical-branches.d.ts +10 -0
  18. package/dist/merge-identical-branches.d.ts.map +1 -0
  19. package/dist/merge-identical-branches.js +118 -0
  20. package/dist/merge-identical-branches.js.map +1 -0
  21. package/dist/remove-duplicate-conditions.d.ts +10 -0
  22. package/dist/remove-duplicate-conditions.d.ts.map +1 -0
  23. package/dist/remove-duplicate-conditions.js +141 -0
  24. package/dist/remove-duplicate-conditions.js.map +1 -0
  25. package/dist/remove-self-assignment.d.ts +10 -0
  26. package/dist/remove-self-assignment.d.ts.map +1 -0
  27. package/dist/remove-self-assignment.js +86 -0
  28. package/dist/remove-self-assignment.js.map +1 -0
  29. package/dist/remove-unconditional-value-overwrite.d.ts +10 -0
  30. package/dist/remove-unconditional-value-overwrite.d.ts.map +1 -0
  31. package/dist/remove-unconditional-value-overwrite.js +112 -0
  32. package/dist/remove-unconditional-value-overwrite.js.map +1 -0
  33. package/dist/simplify-boolean-literal.d.ts +9 -0
  34. package/dist/simplify-boolean-literal.d.ts.map +1 -0
  35. package/dist/simplify-boolean-literal.js +179 -0
  36. package/dist/simplify-boolean-literal.js.map +1 -0
  37. package/dist/simplify-redundant-logical-expression.d.ts +10 -0
  38. package/dist/simplify-redundant-logical-expression.d.ts.map +1 -0
  39. package/dist/simplify-redundant-logical-expression.js +63 -0
  40. package/dist/simplify-redundant-logical-expression.js.map +1 -0
  41. package/package.json +39 -0
  42. package/src/all-branches-identical.ts +133 -0
  43. package/src/boolean-checks-not-inverted.ts +144 -0
  44. package/src/collapsible-if-statements.ts +162 -0
  45. package/src/index.ts +34 -0
  46. package/src/merge-identical-branches.ts +149 -0
  47. package/src/remove-duplicate-conditions.ts +165 -0
  48. package/src/remove-self-assignment.ts +98 -0
  49. package/src/remove-unconditional-value-overwrite.ts +128 -0
  50. package/src/simplify-boolean-literal.ts +220 -0
  51. package/src/simplify-redundant-logical-expression.ts +75 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-identical-branches.js","sourceRoot":"","sources":["../src/merge-identical-branches.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class RemoveDuplicateConditions extends Recipe {
3
+ name: string;
4
+ displayName: string;
5
+ description: string;
6
+ tags: string[];
7
+ estimatedEffortPerOccurrence: number;
8
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
9
+ }
10
+ //# sourceMappingURL=remove-duplicate-conditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-duplicate-conditions.d.ts","sourceRoot":"","sources":["../src/remove-duplicate-conditions.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,gBAAgB,EAAW,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAYpF,qBAAa,yBAA0B,SAAQ,MAAM;IACjD,IAAI,SAAkE;IACtE,WAAW,SAAsD;IACjE,WAAW,SAEgC;IAC3C,IAAI,WAAmB;IACvB,4BAA4B,SAAM;IAE5B,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CA+B9D"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RemoveDuplicateConditions = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ const java_1 = require("@openrewrite/rewrite/java");
16
+ class RemoveDuplicateConditions extends rewrite_1.Recipe {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.name = "org.openrewrite.javascript.cleanup.RemoveDuplicateConditions";
20
+ this.displayName = "Remove duplicate conditions in if/else-if chains";
21
+ this.description = "Remove `else if` branches whose condition is identical to an earlier " +
22
+ "branch in the same `if`/`else if` chain, since the duplicate branch " +
23
+ "is dead code that can never execute.";
24
+ this.tags = ["RSPEC-S1862"];
25
+ this.estimatedEffortPerOccurrence = 10;
26
+ }
27
+ editor() {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ return new class extends javascript_1.JavaScriptVisitor {
30
+ visitIf(ifStmt, ctx) {
31
+ const _super = Object.create(null, {
32
+ visitIf: { get: () => super.visitIf }
33
+ });
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ ifStmt = (yield _super.visitIf.call(this, ifStmt, ctx));
36
+ const parentCursor = this.cursor.parent;
37
+ if (parentCursor) {
38
+ const parentIf = parentCursor.firstEnclosing((n) => n.kind === java_1.J.Kind.If);
39
+ if (parentIf) {
40
+ return ifStmt;
41
+ }
42
+ }
43
+ const result = yield removeDuplicates(ifStmt);
44
+ if (result === ifStmt) {
45
+ return ifStmt;
46
+ }
47
+ return yield this.produceJava(ifStmt, ctx, draft => {
48
+ Object.assign(draft, result);
49
+ });
50
+ });
51
+ }
52
+ };
53
+ });
54
+ }
55
+ }
56
+ exports.RemoveDuplicateConditions = RemoveDuplicateConditions;
57
+ function printExpr(node) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ const p = (0, rewrite_1.printer)("org.openrewrite.javascript.tree.JS$CompilationUnit");
60
+ return (yield p.print(node)).trim();
61
+ });
62
+ }
63
+ function expressionsEqual(a, b) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ return (yield printExpr(a)) === (yield printExpr(b));
66
+ });
67
+ }
68
+ function removeDuplicates(ifStmt) {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const seen = [ifStmt.ifCondition.tree.element];
71
+ let result = ifStmt;
72
+ let changed = false;
73
+ let current = ifStmt;
74
+ while (current.elsePart) {
75
+ const body = current.elsePart.body.element;
76
+ if (body.kind !== java_1.J.Kind.If) {
77
+ break;
78
+ }
79
+ const elseIf = body;
80
+ const cond = elseIf.ifCondition.tree.element;
81
+ let isDuplicate = false;
82
+ for (const prev of seen) {
83
+ if (yield expressionsEqual(prev, cond)) {
84
+ isDuplicate = true;
85
+ break;
86
+ }
87
+ }
88
+ if (isDuplicate) {
89
+ const newElse = elseIf.elsePart;
90
+ result = replaceElse(result, current, newElse);
91
+ changed = true;
92
+ const updated = findById(result, current.id);
93
+ if (updated) {
94
+ current = updated;
95
+ }
96
+ else {
97
+ break;
98
+ }
99
+ }
100
+ else {
101
+ seen.push(cond);
102
+ current = elseIf;
103
+ }
104
+ }
105
+ return changed ? result : ifStmt;
106
+ });
107
+ }
108
+ function replaceElse(root, target, newElse) {
109
+ if (root.id === target.id) {
110
+ return Object.assign(Object.assign({}, root), { elsePart: newElse });
111
+ }
112
+ const elsePart = root.elsePart;
113
+ if (!elsePart) {
114
+ return root;
115
+ }
116
+ const body = elsePart.body.element;
117
+ if (body.kind !== java_1.J.Kind.If) {
118
+ return root;
119
+ }
120
+ const branch = body;
121
+ const updated = replaceElse(branch, target, newElse);
122
+ if (updated === branch) {
123
+ return root;
124
+ }
125
+ return Object.assign(Object.assign({}, root), { elsePart: Object.assign(Object.assign({}, elsePart), { body: Object.assign(Object.assign({}, elsePart.body), { element: updated }) }) });
126
+ }
127
+ function findById(root, id) {
128
+ if (root.id === id) {
129
+ return root;
130
+ }
131
+ const elsePart = root.elsePart;
132
+ if (!elsePart) {
133
+ return undefined;
134
+ }
135
+ const body = elsePart.body.element;
136
+ if (body.kind === java_1.J.Kind.If) {
137
+ return findById(body, id);
138
+ }
139
+ return undefined;
140
+ }
141
+ //# sourceMappingURL=remove-duplicate-conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-duplicate-conditions.js","sourceRoot":"","sources":["../src/remove-duplicate-conditions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class RemoveSelfAssignment extends Recipe {
3
+ name: string;
4
+ displayName: string;
5
+ description: string;
6
+ tags: string[];
7
+ estimatedEffortPerOccurrence: number;
8
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
9
+ }
10
+ //# sourceMappingURL=remove-self-assignment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-self-assignment.d.ts","sourceRoot":"","sources":["../src/remove-self-assignment.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,gBAAgB,EAAW,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAgBpF,qBAAa,oBAAqB,SAAQ,MAAM;IAC5C,IAAI,SAA6D;IACjE,WAAW,SAA6B;IACxC,WAAW,SAEmC;IAC9C,IAAI,WAAmB;IACvB,4BAA4B,SAAK;IAE3B,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAgC9D"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RemoveSelfAssignment = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ const java_1 = require("@openrewrite/rewrite/java");
16
+ class RemoveSelfAssignment extends rewrite_1.Recipe {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.name = "org.openrewrite.javascript.cleanup.RemoveSelfAssignment";
20
+ this.displayName = "Remove self-assignments";
21
+ this.description = "Removes assignment statements where a variable is assigned to itself, " +
22
+ "such as `x = x` or `this.x = this.x`. These statements have no effect and " +
23
+ "typically indicate a programming error.";
24
+ this.tags = ["RSPEC-S1656"];
25
+ this.estimatedEffortPerOccurrence = 3;
26
+ }
27
+ editor() {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ return new class extends javascript_1.JavaScriptVisitor {
30
+ visitBlock(block, ctx) {
31
+ const _super = Object.create(null, {
32
+ visitBlock: { get: () => super.visitBlock }
33
+ });
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ block = (yield _super.visitBlock.call(this, block, ctx));
36
+ const stmts = block.statements;
37
+ if (stmts.length === 0) {
38
+ return block;
39
+ }
40
+ const toRemove = new Set();
41
+ for (let i = 0; i < stmts.length; i++) {
42
+ const assign = getAssignment(stmts[i].element);
43
+ if (assign && (yield isSelfAssignment(assign))) {
44
+ toRemove.add(i);
45
+ }
46
+ }
47
+ if (toRemove.size === 0) {
48
+ return block;
49
+ }
50
+ const newStmts = stmts.filter((_, idx) => !toRemove.has(idx));
51
+ return this.produceJava(block, ctx, draft => {
52
+ draft.statements = newStmts;
53
+ });
54
+ });
55
+ }
56
+ };
57
+ });
58
+ }
59
+ }
60
+ exports.RemoveSelfAssignment = RemoveSelfAssignment;
61
+ function getAssignment(stmt) {
62
+ if (stmt.kind === javascript_1.JS.Kind.ExpressionStatement) {
63
+ const expr = stmt.expression;
64
+ if (expr.kind === java_1.J.Kind.Assignment) {
65
+ return expr;
66
+ }
67
+ }
68
+ if (stmt.kind === java_1.J.Kind.Assignment) {
69
+ return stmt;
70
+ }
71
+ return undefined;
72
+ }
73
+ function printNode(node) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ const p = (0, rewrite_1.printer)("org.openrewrite.javascript.tree.JS$CompilationUnit");
76
+ return (yield p.print(node)).trim();
77
+ });
78
+ }
79
+ function isSelfAssignment(assign) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ const variable = assign.variable;
82
+ const value = assign.assignment.element;
83
+ return (yield printNode(variable)) === (yield printNode(value));
84
+ });
85
+ }
86
+ //# sourceMappingURL=remove-self-assignment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-self-assignment.js","sourceRoot":"","sources":["../src/remove-self-assignment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class RemoveUnconditionalValueOverwrite extends Recipe {
3
+ name: string;
4
+ displayName: string;
5
+ description: string;
6
+ tags: string[];
7
+ estimatedEffortPerOccurrence: number;
8
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
9
+ }
10
+ //# sourceMappingURL=remove-unconditional-value-overwrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-unconditional-value-overwrite.d.ts","sourceRoot":"","sources":["../src/remove-unconditional-value-overwrite.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,gBAAgB,EAAW,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAepF,qBAAa,iCAAkC,SAAQ,MAAM;IACzD,IAAI,SAA0E;IAC9E,WAAW,SAA2C;IACtD,WAAW,SAEuB;IAClC,IAAI,WAAmB;IACvB,4BAA4B,SAAK;IAE3B,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CA0C9D"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RemoveUnconditionalValueOverwrite = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ const java_1 = require("@openrewrite/rewrite/java");
16
+ class RemoveUnconditionalValueOverwrite extends rewrite_1.Recipe {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.name = "org.openrewrite.javascript.cleanup.RemoveUnconditionalValueOverwrite";
20
+ this.displayName = "Remove unconditional value overwrites";
21
+ this.description = "Remove consecutive assignments that write to the same object property " +
22
+ "or bracket-accessed key, since the first value is immediately " +
23
+ "overwritten and never used.";
24
+ this.tags = ["RSPEC-S4143"];
25
+ this.estimatedEffortPerOccurrence = 5;
26
+ }
27
+ editor() {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ return new class extends javascript_1.JavaScriptVisitor {
30
+ visitBlock(block, ctx) {
31
+ const _super = Object.create(null, {
32
+ visitBlock: { get: () => super.visitBlock }
33
+ });
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ block = (yield _super.visitBlock.call(this, block, ctx));
36
+ const stmts = block.statements;
37
+ if (stmts.length < 2) {
38
+ return block;
39
+ }
40
+ const toRemove = new Set();
41
+ for (let i = 0; i < stmts.length - 1; i++) {
42
+ if (toRemove.has(i)) {
43
+ continue;
44
+ }
45
+ const aAssign = getAssignment(stmts[i].element);
46
+ if (!aAssign || !isPropertyAssign(aAssign)) {
47
+ continue;
48
+ }
49
+ const bAssign = getAssignment(stmts[i + 1].element);
50
+ if (!bAssign) {
51
+ continue;
52
+ }
53
+ if (yield isDuplicateWrite(aAssign, bAssign)) {
54
+ toRemove.add(i);
55
+ }
56
+ }
57
+ if (toRemove.size === 0) {
58
+ return block;
59
+ }
60
+ const newStmts = stmts.filter((_, idx) => !toRemove.has(idx));
61
+ return this.produceJava(block, ctx, draft => {
62
+ draft.statements = newStmts;
63
+ });
64
+ });
65
+ }
66
+ };
67
+ });
68
+ }
69
+ }
70
+ exports.RemoveUnconditionalValueOverwrite = RemoveUnconditionalValueOverwrite;
71
+ function getAssignment(stmt) {
72
+ if (stmt.kind === javascript_1.JS.Kind.ExpressionStatement) {
73
+ const expr = stmt.expression;
74
+ if (expr.kind === java_1.J.Kind.Assignment) {
75
+ return expr;
76
+ }
77
+ }
78
+ if (stmt.kind === java_1.J.Kind.Assignment) {
79
+ return stmt;
80
+ }
81
+ return undefined;
82
+ }
83
+ function isPropertyAssign(assign) {
84
+ const v = assign.variable;
85
+ return v.kind === java_1.J.Kind.ArrayAccess || v.kind === java_1.J.Kind.FieldAccess;
86
+ }
87
+ function printNode(node) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ const p = (0, rewrite_1.printer)("org.openrewrite.javascript.tree.JS$CompilationUnit");
90
+ return yield p.print(node);
91
+ });
92
+ }
93
+ function isDuplicateWrite(a, b) {
94
+ return __awaiter(this, void 0, void 0, function* () {
95
+ const va = a.variable;
96
+ const vb = b.variable;
97
+ if (va.kind === java_1.J.Kind.ArrayAccess && vb.kind === java_1.J.Kind.ArrayAccess) {
98
+ const aa = va;
99
+ const ab = vb;
100
+ return (yield printNode(aa.indexed)) === (yield printNode(ab.indexed)) &&
101
+ (yield printNode(aa.dimension.index.element)) === (yield printNode(ab.dimension.index.element));
102
+ }
103
+ if (va.kind === java_1.J.Kind.FieldAccess && vb.kind === java_1.J.Kind.FieldAccess) {
104
+ const fa = va;
105
+ const fb = vb;
106
+ return fa.name.element.simpleName === fb.name.element.simpleName &&
107
+ (yield printNode(fa.target)) === (yield printNode(fb.target));
108
+ }
109
+ return false;
110
+ });
111
+ }
112
+ //# sourceMappingURL=remove-unconditional-value-overwrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-unconditional-value-overwrite.js","sourceRoot":"","sources":["../src/remove-unconditional-value-overwrite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class SimplifyBooleanLiteral extends Recipe {
3
+ name: string;
4
+ displayName: string;
5
+ description: string;
6
+ tags: string[];
7
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
8
+ }
9
+ //# sourceMappingURL=simplify-boolean-literal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simplify-boolean-literal.d.ts","sourceRoot":"","sources":["../src/simplify-boolean-literal.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAa3E,qBAAa,sBAAuB,SAAQ,MAAM;IAC9C,IAAI,SAA+D;IACnE,WAAW,SAA0C;IACrD,WAAW,SAE6D;IACxE,IAAI,WAAmB;IAEjB,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAuL9D"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SimplifyBooleanLiteral = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ class SimplifyBooleanLiteral extends rewrite_1.Recipe {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.name = "org.openrewrite.javascript.cleanup.SimplifyBooleanLiteral";
19
+ this.displayName = "Simplify boolean literal comparisons";
20
+ this.description = "Removes redundant comparisons against boolean literals. " +
21
+ "For example, `x === true` becomes `x` and `x === false` becomes `!x`. " +
22
+ "Handles both strict (`===`/`!==`) and loose (`==`/`!=`) equality.";
23
+ this.tags = ["RSPEC-S1125"];
24
+ }
25
+ editor() {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ const equalsTrue = (0, javascript_1.rewrite)(() => {
28
+ const x = (0, javascript_1.capture)();
29
+ return {
30
+ before: (0, javascript_1.pattern) `${x} === true`,
31
+ after: (0, javascript_1.template) `${x}`
32
+ };
33
+ });
34
+ const trueEquals = (0, javascript_1.rewrite)(() => {
35
+ const x = (0, javascript_1.capture)();
36
+ return {
37
+ before: (0, javascript_1.pattern) `true === ${x}`,
38
+ after: (0, javascript_1.template) `${x}`
39
+ };
40
+ });
41
+ const equalsFalse = (0, javascript_1.rewrite)(() => {
42
+ const x = (0, javascript_1.capture)();
43
+ return {
44
+ before: (0, javascript_1.pattern) `${x} === false`,
45
+ after: (0, javascript_1.template) `!${x}`
46
+ };
47
+ });
48
+ const falseEquals = (0, javascript_1.rewrite)(() => {
49
+ const x = (0, javascript_1.capture)();
50
+ return {
51
+ before: (0, javascript_1.pattern) `false === ${x}`,
52
+ after: (0, javascript_1.template) `!${x}`
53
+ };
54
+ });
55
+ const notEqualsTrue = (0, javascript_1.rewrite)(() => {
56
+ const x = (0, javascript_1.capture)();
57
+ return {
58
+ before: (0, javascript_1.pattern) `${x} !== true`,
59
+ after: (0, javascript_1.template) `!${x}`
60
+ };
61
+ });
62
+ const trueNotEquals = (0, javascript_1.rewrite)(() => {
63
+ const x = (0, javascript_1.capture)();
64
+ return {
65
+ before: (0, javascript_1.pattern) `true !== ${x}`,
66
+ after: (0, javascript_1.template) `!${x}`
67
+ };
68
+ });
69
+ const notEqualsFalse = (0, javascript_1.rewrite)(() => {
70
+ const x = (0, javascript_1.capture)();
71
+ return {
72
+ before: (0, javascript_1.pattern) `${x} !== false`,
73
+ after: (0, javascript_1.template) `${x}`
74
+ };
75
+ });
76
+ const falseNotEquals = (0, javascript_1.rewrite)(() => {
77
+ const x = (0, javascript_1.capture)();
78
+ return {
79
+ before: (0, javascript_1.pattern) `false !== ${x}`,
80
+ after: (0, javascript_1.template) `${x}`
81
+ };
82
+ });
83
+ const looseEqualsTrue = (0, javascript_1.rewrite)(() => {
84
+ const x = (0, javascript_1.capture)();
85
+ return {
86
+ before: (0, javascript_1.pattern) `${x} == true`,
87
+ after: (0, javascript_1.template) `${x}`
88
+ };
89
+ });
90
+ const trueLooseEquals = (0, javascript_1.rewrite)(() => {
91
+ const x = (0, javascript_1.capture)();
92
+ return {
93
+ before: (0, javascript_1.pattern) `true == ${x}`,
94
+ after: (0, javascript_1.template) `${x}`
95
+ };
96
+ });
97
+ const looseEqualsFalse = (0, javascript_1.rewrite)(() => {
98
+ const x = (0, javascript_1.capture)();
99
+ return {
100
+ before: (0, javascript_1.pattern) `${x} == false`,
101
+ after: (0, javascript_1.template) `!${x}`
102
+ };
103
+ });
104
+ const falseLooseEquals = (0, javascript_1.rewrite)(() => {
105
+ const x = (0, javascript_1.capture)();
106
+ return {
107
+ before: (0, javascript_1.pattern) `false == ${x}`,
108
+ after: (0, javascript_1.template) `!${x}`
109
+ };
110
+ });
111
+ const looseNotEqualsTrue = (0, javascript_1.rewrite)(() => {
112
+ const x = (0, javascript_1.capture)();
113
+ return {
114
+ before: (0, javascript_1.pattern) `${x} != true`,
115
+ after: (0, javascript_1.template) `!${x}`
116
+ };
117
+ });
118
+ const trueLooseNotEquals = (0, javascript_1.rewrite)(() => {
119
+ const x = (0, javascript_1.capture)();
120
+ return {
121
+ before: (0, javascript_1.pattern) `true != ${x}`,
122
+ after: (0, javascript_1.template) `!${x}`
123
+ };
124
+ });
125
+ const looseNotEqualsFalse = (0, javascript_1.rewrite)(() => {
126
+ const x = (0, javascript_1.capture)();
127
+ return {
128
+ before: (0, javascript_1.pattern) `${x} != false`,
129
+ after: (0, javascript_1.template) `${x}`
130
+ };
131
+ });
132
+ const falseLooseNotEquals = (0, javascript_1.rewrite)(() => {
133
+ const x = (0, javascript_1.capture)();
134
+ return {
135
+ before: (0, javascript_1.pattern) `false != ${x}`,
136
+ after: (0, javascript_1.template) `${x}`
137
+ };
138
+ });
139
+ const strictRules = equalsTrue
140
+ .orElse(trueEquals)
141
+ .orElse(equalsFalse)
142
+ .orElse(falseEquals)
143
+ .orElse(notEqualsTrue)
144
+ .orElse(trueNotEquals)
145
+ .orElse(notEqualsFalse)
146
+ .orElse(falseNotEquals);
147
+ const looseRules = looseEqualsTrue
148
+ .orElse(trueLooseEquals)
149
+ .orElse(looseEqualsFalse)
150
+ .orElse(falseLooseEquals)
151
+ .orElse(looseNotEqualsTrue)
152
+ .orElse(trueLooseNotEquals)
153
+ .orElse(looseNotEqualsFalse)
154
+ .orElse(falseLooseNotEquals);
155
+ return new class extends javascript_1.JavaScriptVisitor {
156
+ visitBinary(binary, ctx) {
157
+ const _super = Object.create(null, {
158
+ visitBinary: { get: () => super.visitBinary }
159
+ });
160
+ return __awaiter(this, void 0, void 0, function* () {
161
+ binary = (yield _super.visitBinary.call(this, binary, ctx));
162
+ return (yield looseRules.tryOn(this.cursor, binary)) || binary;
163
+ });
164
+ }
165
+ visitBinaryExtensions(binary, ctx) {
166
+ const _super = Object.create(null, {
167
+ visitBinaryExtensions: { get: () => super.visitBinaryExtensions }
168
+ });
169
+ return __awaiter(this, void 0, void 0, function* () {
170
+ binary = (yield _super.visitBinaryExtensions.call(this, binary, ctx));
171
+ return (yield strictRules.tryOn(this.cursor, binary)) || binary;
172
+ });
173
+ }
174
+ };
175
+ });
176
+ }
177
+ }
178
+ exports.SimplifyBooleanLiteral = SimplifyBooleanLiteral;
179
+ //# sourceMappingURL=simplify-boolean-literal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simplify-boolean-literal.js","sourceRoot":"","sources":["../src/simplify-boolean-literal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class SimplifyRedundantLogicalExpression extends Recipe {
3
+ name: string;
4
+ displayName: string;
5
+ description: string;
6
+ tags: string[];
7
+ estimatedEffortPerOccurrence: number;
8
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
9
+ }
10
+ //# sourceMappingURL=simplify-redundant-logical-expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simplify-redundant-logical-expression.d.ts","sourceRoot":"","sources":["../src/simplify-redundant-logical-expression.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,gBAAgB,EAAW,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAcpF,qBAAa,kCAAmC,SAAQ,MAAM;IAC1D,IAAI,SAA2E;IAC/E,WAAW,SAA4C;IACvD,WAAW,SAEoC;IAC/C,IAAI,WAAmB;IACvB,4BAA4B,SAAK;IAE3B,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAuB9D"}