Skip to content

Commit 6958b4b

Browse files
committed
feat(extra-brackets): fix extra brackets
1 parent c4ad159 commit 6958b4b

File tree

4 files changed

+35
-1
lines changed

4 files changed

+35
-1
lines changed

index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ const comment = (err) => err.found === '/';
5555

5656
const ops = (err) => ['+', '-', '*', '/', '>', '<', '~', '|', '&', '^'].includes(err.found);
5757

58+
const extraBrackets = (err) => err.found === '}';
59+
5860
const runFixer = ({ verbose, lines, start, err }) => {
5961
/* eslint-disable security/detect-object-injection */
6062
let fixedData = [...lines];
@@ -80,6 +82,8 @@ const runFixer = ({ verbose, lines, start, err }) => {
8082
fixedData = fixer.fixComment({ start, fixedData, verbose });
8183
} else if (ops(err)) {
8284
fixedData = fixer.fixOpConcat({ start, fixedData, verbose });
85+
} else if (extraBrackets(err)) {
86+
fixedData = fixer.fixExtraCurlyBrackets({ start, fixedData, verbose });
8387
} else throw new Error(`Unsupported issue: ${err.message} (please open an issue at the repo)`);
8488
return fixedData;
8589
};

src/__tests__/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,12 @@ describe('fix wrong brackets', () => {
289289
{ verbose: true }
290290
);
291291
});
292+
293+
it('extra brackets', () => {
294+
shouldHaveChanged('extraBrackets', {
295+
error: 'extra brackets'
296+
});
297+
});
292298
});
293299

294300
describe('comments', () => {

src/fixer.js

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,26 @@ const fixOpConcat = ({ start, fixedData, verbose }) => {
156156
return fixedData;
157157
};
158158

159+
function fixExtraCurlyBrackets({ start, fixedData, verbose }) {
160+
if (verbose) psw(chalk.magenta('Extra curly brackets'));
161+
162+
const targetLine = start.line - 1;
163+
const fullData = fixedData.join('\n');
164+
let fixedLine = removeLinebreak(fixedData[targetLine]);
165+
166+
const openingCount = [...fullData].filter((c) => c === '{').length;
167+
const closingCount = [...fullData].filter((c) => c === '}').length;
168+
const bracketDiff = closingCount - openingCount;
169+
170+
for (let i = 0; i < bracketDiff; i++) {
171+
const index = fixedLine.lastIndexOf('}');
172+
fixedLine = fixedLine.slice(0, index) + fixedLine.slice(index + 1);
173+
}
174+
175+
fixedData[targetLine] = fixedLine;
176+
return fixedData;
177+
}
178+
159179
module.exports = {
160180
fixExtraChar,
161181
fixSingleQuotes,
@@ -164,5 +184,6 @@ module.exports = {
164184
fixSquareBrackets,
165185
fixCurlyBrackets,
166186
fixComment,
167-
fixOpConcat
187+
fixOpConcat,
188+
fixExtraCurlyBrackets
168189
};

test/samples/extraBrackets.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"error": "extra brackets"
3+
}}}

0 commit comments

Comments
 (0)