Skip to content

Commit

Permalink
fix: address edge case in comment stripping (#1780)
Browse files Browse the repository at this point in the history
Unforunately, cdfb491 introduced issues
with certain edge cases for comments. Fixing the edge case in the
regular expression is likely to reintroduce the issue that commit was
addressing. This change replaces the regular expression entirely with
a function that iterates through the string instead of regular
expressions.
  • Loading branch information
Trott authored Jan 10, 2022
1 parent e27aaab commit b015d34
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 6 deletions.
32 changes: 29 additions & 3 deletions lib/autoInject.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,37 @@ var FN_ARGS = /^(?:async\s+)?(?:function)?\s*\w*\s*\(\s*([^)]+)\s*\)(?:\s*{)/;
var ARROW_FN_ARGS = /^(?:async\s+)?\(?\s*([^)=]+)\s*\)?(?:\s*=>)/;
var FN_ARG_SPLIT = /,/;
var FN_ARG = /(=.+)?(\s*)$/;
var STRIP_COMMENTS = /(\/\*(?:[^/]|\/(?!\*))*\*\/)|\/\/.*$/mg;

function stripComments(string) {
let stripped = '';
let index = 0;
let endBlockComment = string.indexOf('*/');
while (index < string.length) {
if (string[index] === '/' && string[index+1] === '/') {
// inline comment
let endIndex = string.indexOf('\n', index);
index = (endIndex === -1) ? string.length : endIndex;
} else if ((endBlockComment !== -1) && (string[index] === '/') && (string[index+1] === '*')) {
// block comment
let endIndex = string.indexOf('*/', index);
if (endIndex !== -1) {
index = endIndex + 2;
endBlockComment = string.indexOf('*/', index);
} else {
stripped += string[index];
index++;
}
} else {
stripped += string[index];
index++;
}
}
return stripped;
}

function parseParams(func) {
const src = func.toString().replace(STRIP_COMMENTS, '');
let match = src.match(FN_ARGS)
const src = stripComments(func.toString());
let match = src.match(FN_ARGS);
if (!match) {
match = src.match(ARROW_FN_ARGS);
}
Expand Down
10 changes: 7 additions & 3 deletions test/autoInject.js
Original file line number Diff line number Diff line change
Expand Up @@ -243,13 +243,17 @@ describe('autoInject', () => {
,callback) {
callback(null, true);
},
task3: function task3(callback) {
task3: function task3(task4 /* /* )
*/, callback) {
callback(null, true);
}
},
task4: function task4(callback) {
callback(null, true);
},
},
(err, result) => {
expect(err).to.eql(null);
expect(result).to.deep.eql({task1: true, task2: true, task3: true});
expect(result).to.deep.eql({task1: true, task2: true, task3: true, task4: true});
done();
});
});
Expand Down

0 comments on commit b015d34

Please sign in to comment.