From bbbd05cab7260f7db9ffcb4adb2e19bdf661bca9 Mon Sep 17 00:00:00 2001 From: Johannes Ewald Date: Tue, 28 Apr 2015 00:46:50 +0200 Subject: Fix issue where the strict mode was not detected when a comment was before "strict mode"; Fixes #54 --- lib/detectStrictMode.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/detectStrictMode.js b/lib/detectStrictMode.js index 35f27fb..57dc14d 100644 --- a/lib/detectStrictMode.js +++ b/lib/detectStrictMode.js @@ -1,3 +1,7 @@ +var multiLineComment = /^\s*\/\*.*?\*\//; +var singleLineComment = /^\s*\/\/.*?[\r\n]/; +var strictMode = /^\s*(?:"use strict"|'use strict')[ \t]*(?:[\r\n]|;)/; + /** * Returns true if the source code is intended to run in strict mode. Does not detect * "use strict" if it occurs in a nested function. @@ -6,7 +10,19 @@ * @return {Boolean} */ function detectStrictMode(src) { - return (/^\s*(?:"use strict"|'use strict')[ \t]*(?:[\r\n]|;)/g).test(src); + var singleLine; + var multiLine; + + while ((singleLine = singleLineComment.test(src)) || (multiLine = multiLineComment.test(src))) { + if (singleLine) { + src = src.replace(singleLineComment, ""); + } + if (multiLine) { + src = src.replace(multiLineComment, ""); + } + } + + return strictMode.test(src); } -module.exports = detectStrictMode; \ No newline at end of file +module.exports = detectStrictMode; -- cgit v1.2.3