immosquare-cleaner 1.3.0 → 1.3.1
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.
- checksums.yaml +4 -4
- data/lib/immosquare-cleaner/version.rb +1 -1
- data/linters/eslint-plugins/align-assignments.mjs +26 -38
- data/package.json +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 06af1c0a31ef811c54efdd4d3f845317c81f02db83112947da04390fd5c69e6c
|
|
4
|
+
data.tar.gz: d3c8617e585affa872699e5378ac6c90818d1fe0d6a3fe6f1bbcf62d727c7451
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 354c8df2a5913b65613909c4d000161aafb2fcb7ab66b09e1dd909f0df6d6b74c982f44a65c7f10bba1525ceb1a42203f1aa8df37b70eaf2a8bc327efd7b4808
|
|
7
|
+
data.tar.gz: b0df5b076458f940f997f92bd76643fa472d850c480f88cc9508eccf1fb7ab0cfd8b99429e80ce0d18c9bc85976c52423ae955e48983cfc7d58725d82fc5f641
|
|
@@ -38,8 +38,6 @@
|
|
|
38
38
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
39
39
|
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
40
40
|
//============================================================//
|
|
41
|
-
const hasRequire = /require\(/
|
|
42
|
-
const spaceMatcher = /(\s*)((?:\|\||&&|\?\?|\+|-|\*|\/|%|&|\^|\||<<|>>|\*\*|>>>)?=)/
|
|
43
41
|
|
|
44
42
|
const assignmentOperators = ["=", "+=", "-=", "*=", "/=", "%=", "&=", "^=", "|=", "<<=", ">>=", "**=", ">>>=", "||=", "&&=", "??="]
|
|
45
43
|
|
|
@@ -100,35 +98,31 @@ const rule = {
|
|
|
100
98
|
previousNode = groupNode
|
|
101
99
|
}
|
|
102
100
|
|
|
103
|
-
const
|
|
104
|
-
const
|
|
105
|
-
|
|
101
|
+
const assignmentTokenOf = (node) => {
|
|
102
|
+
const left = isAssignmentExpression(node) ? node.left : node.declarations[0]?.id
|
|
103
|
+
if (!left) return null
|
|
104
|
+
const token = sourceCode.getTokenAfter(left)
|
|
105
|
+
return token && assignmentOperators.includes(token.value) ? token : null
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
const match = source.slice(prefix).match(spaceMatcher)
|
|
112
|
-
return match ? match.index + prefix + match[2].length : null
|
|
108
|
+
const findAssignment = (node) => {
|
|
109
|
+
const token = assignmentTokenOf(node)
|
|
110
|
+
return token ? token.loc.end.column - sourceCode.getFirstToken(node).loc.start.column - 1 : null
|
|
113
111
|
}
|
|
114
112
|
|
|
115
113
|
const assignmentOnFirstLine = (node) => {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const source = sourceCode.getText(node)
|
|
119
|
-
const lines = source.split("\n")
|
|
120
|
-
return lines[0].includes("=")
|
|
114
|
+
const token = assignmentTokenOf(node)
|
|
115
|
+
return token && !isMultiline(sourceCode.getFirstToken(node), token)
|
|
121
116
|
}
|
|
122
117
|
|
|
123
118
|
const areAligned = (maxPos, nodes) => nodes
|
|
124
119
|
.filter(assignmentOnFirstLine)
|
|
125
|
-
.
|
|
126
|
-
.every((source) => source.charAt(maxPos) === "=")
|
|
120
|
+
.every((node) => findAssignment(node) === maxPos)
|
|
127
121
|
|
|
128
122
|
const getMaxPos = (nodes) => nodes
|
|
129
123
|
.filter(assignmentOnFirstLine)
|
|
130
|
-
.map(
|
|
131
|
-
.reduce((last, current) => Math.max(last, current),
|
|
124
|
+
.map(findAssignment)
|
|
125
|
+
.reduce((last, current) => Math.max(last, current), 0)
|
|
132
126
|
|
|
133
127
|
const check = (group) => {
|
|
134
128
|
const maxPos = getMaxPos(group)
|
|
@@ -141,27 +135,21 @@ const rule = {
|
|
|
141
135
|
end: getLast(group).loc.end
|
|
142
136
|
},
|
|
143
137
|
message: "This group of assignments is not aligned",
|
|
144
|
-
fix: (fixer) => group.
|
|
145
|
-
const
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
if (lineIsAligned || !assignmentToken || isMultiline(firstToken, assignmentToken)) return fixer.replaceText(node, line)
|
|
138
|
+
fix: (fixer) => group.flatMap((node) => {
|
|
139
|
+
const firstToken = sourceCode.getFirstToken(node)
|
|
140
|
+
const assignmentToken = assignmentTokenOf(node)
|
|
141
|
+
if (!assignmentToken || isMultiline(firstToken, assignmentToken) || findAssignment(node) === maxPos) return []
|
|
142
|
+
const previousToken = sourceCode.getTokenBefore(assignmentToken)
|
|
143
|
+
const gap = [previousToken.range[1], assignmentToken.range[0]]
|
|
144
|
+
if (sourceCode.commentsExistBetween(previousToken, assignmentToken)) return []
|
|
152
145
|
|
|
153
146
|
//============================================================//
|
|
154
|
-
//
|
|
155
|
-
//
|
|
147
|
+
// Only the spacing before the operator belongs to this rule. Replacing a declaration
|
|
148
|
+
// can cut a template processor's placeholder at an AST boundary inside that marker.
|
|
156
149
|
//============================================================//
|
|
157
|
-
const
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
const start = line.slice(0, startDelimiter).replace(/\s+$/m, "")
|
|
161
|
-
const ending = line.slice(endDelimiter).replace(/^\s+/m, "")
|
|
162
|
-
const spacesRequired = maxPos - start.length - assignmentToken.value.length + 1
|
|
163
|
-
const spaces = " ".repeat(spacesRequired)
|
|
164
|
-
return fixer.replaceText(node, `${start}${spaces}${assignmentToken.value} ${ending}`)
|
|
150
|
+
const prefixWidth = previousToken.loc.end.column - firstToken.loc.start.column
|
|
151
|
+
const spacesRequired = maxPos - prefixWidth - assignmentToken.value.length + 1
|
|
152
|
+
return [fixer.replaceTextRange(gap, " ".repeat(spacesRequired))]
|
|
165
153
|
})
|
|
166
154
|
})
|
|
167
155
|
}
|
|
@@ -169,7 +157,7 @@ const rule = {
|
|
|
169
157
|
return {
|
|
170
158
|
VariableDeclaration: (node) => {
|
|
171
159
|
const source = sourceCode.getText(node)
|
|
172
|
-
if (requiresOnly && !
|
|
160
|
+
if (requiresOnly && !source.includes("require(")) return
|
|
173
161
|
|
|
174
162
|
addNode(node, node)
|
|
175
163
|
},
|
data/package.json
CHANGED