aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Van de Gejuchte <anthonyvdgent@gmail.com>2016-10-16 20:57:28 +0200
committerRichard van Velzen <rvanvelzen1@gmail.com>2016-10-23 21:31:03 +0200
commit8d74f3437352e22b3fd18ce602a4378170ec6598 (patch)
treebd82ae91555550753bf2b1c34b6a5523365df07c
parent266ddd96399afcdee56d9d58b287f912b8728342 (diff)
downloadtracifyjs-8d74f3437352e22b3fd18ce602a4378170ec6598.tar.gz
tracifyjs-8d74f3437352e22b3fd18ce602a4378170ec6598.zip
Don't filter shebangs when using the 'some' comment filter
Also clarify documentation a bit more about using regexp as filter
-rw-r--r--README.md9
-rwxr-xr-xbin/uglifyjs2
-rw-r--r--lib/output.js1
-rw-r--r--test/mocha/comment-filter.js5
4 files changed, 12 insertions, 5 deletions
diff --git a/README.md b/README.md
index 87d828a6..789219dc 100644
--- a/README.md
+++ b/README.md
@@ -98,8 +98,8 @@ The available options are:
"@preserve". You can optionally pass one of the
following arguments to this flag:
- "all" to keep all comments
- - a valid JS regexp (needs to start with a
- slash) to keep only comments that match.
+ - a valid JS RegExp like `/foo/` or `/^!/` to
+ keep only matching comments.
Note that currently not *all* comments can be
kept when compression is on, because of dead
code removal or cascading statements into
@@ -855,10 +855,11 @@ which we care about here are `source_map` and `comments`.
#### Keeping comments in the output
In order to keep certain comments in the output you need to pass the
-`comments` option. Pass a RegExp, boolean or a function. Stringified options
+`comments` option. Pass a RegExp (as string starting and closing with `/`
+or pass a RegExp object), a boolean or a function. Stringified options
`all` and `some` can be passed too, where `some` behaves like it's cli
equivalent `--comments` without passing a value. If you pass a RegExp,
-only those comments whose body matches the regexp will be kept. Note that body
+only those comments whose body matches the RegExp will be kept. Note that body
means without the initial `//` or `/*`. If you pass a function, it will be
called for every comment in the tree and will receive two arguments: the
node that the comment is attached to, and the comment token itself.
diff --git a/bin/uglifyjs b/bin/uglifyjs
index 76438961..ce2e9411 100755
--- a/bin/uglifyjs
+++ b/bin/uglifyjs
@@ -47,7 +47,7 @@ Use -c with no argument to use the default compression options.")
By default this works like Google Closure, keeping JSDoc-style comments that contain \"@license\" or \"@preserve\". \
You can optionally pass one of the following arguments to this flag:\n\
- \"all\" to keep all comments\n\
-- a valid JS regexp (needs to start with a slash) to keep only comments that match.\n\
+- a valid JS RegExp like `/foo/`or `/^!/` to keep only matching comments.\n\
\
Note that currently not *all* comments can be kept when compression is on, \
because of dead code removal or cascading statements into sequences.")
diff --git a/lib/output.js b/lib/output.js
index 014dac46..63a78c60 100644
--- a/lib/output.js
+++ b/lib/output.js
@@ -101,6 +101,7 @@ function OutputStream(options) {
// multiline comment
return /@preserve|@license|@cc_on/i.test(text);
}
+ return type == "comment5";
}
}
else if (options.comments){ // NOTE includes "all" option
diff --git a/test/mocha/comment-filter.js b/test/mocha/comment-filter.js
index 4330d1eb..79162755 100644
--- a/test/mocha/comment-filter.js
+++ b/test/mocha/comment-filter.js
@@ -57,4 +57,9 @@ describe("comment filters", function() {
assert.strictEqual(ast.print_to_string({comments: f}), "#!Random comment\n//test1\n/*test2*/\n");
});
+
+ it("Should never be able to filter comment5 when using 'some' as filter", function() {
+ var ast = UglifyJS.parse("#!foo\n//foo\n/*@preserve*/\n/* please hide me */");
+ assert.strictEqual(ast.print_to_string({comments: "some"}), "#!foo\n/*@preserve*/\n");
+ });
});