ack 2.16 has been released. ack is a grep-like tool optimized for searching source code. It's available at https://beyondgrep.com, or via CPAN using App::Ack. Here are the changes between 2.16 and 2.14.
2.16 Fri Mar 10 13:32:39 CST 2017 ==================================== [CONFUSING BEHAVIOR & UPCOMING CHANGES] The -w has a confusing behavior that it's had since back to ack 1.x that will be changing in the future. It's not changing in this version, but this is a heads-up that it's coming. ack -w is "match a whole word", and ack does this by putting turning your PATTERN into \bPATTERN\b. So "ack -w foo" effectively becomes "ack \bfoo\b". Handy. The problem is that ack doesn't put a \b before PATTERN if it begins with a non-word character, and won't put a \b after PATTERN if it ends with a non-word character. The problem is that if you're searching for "fool" or "foot", but only as a word, and you do "ack -w foo[lt]" or "ack -w (fool|foot)", you'll get matches for "football and foolish" which certainly should not match if you're using -w. [ENHANCEMENTS] Include .cljs, .cljc and .edn files with the --clojure filetype. Thanks, Austin Chamberlin. Added .xsd to the --xml filetype. Thanks, Nick Morrott. Added support for Swift language. Thanks, Nikolaj Schumacher. (GH #512) The MSYS2 project is now seen as Windows. Thanks, Ray Donnelly. (GH #450) Expand the definition of OCaml files. Thanks, Marek Kubica. (GH #511) Add support for Groovy Server Pages. Thanks, Ethan Mallove. (GH #469) The JSP filetype (--jsp) now recognizes .jspf files. Thanks, Sebastien Feugere. (GH #586) Added --hpp option for C++ header files. Thankis, Steffen Jaeckel. ack now supports --ignore-dir=match:.... Thanks, Ailin Nemui! (GitHub ticket #42) ack also supports --ignore-dir=ext:..., and --noignore-dir supports match/ext as well [FIXES] Reverted an optimization to make \s work properly again. (GH #572, GH #571, GH #562, GH #491, GH #498) The -l and -c flags would sometimes return inaccurate results due to a bug introduced in 2.14. Thanks to Elliot Shank for the report! (GH #491) Behavior when using newlines in a search was inconsistent. Thanks to Yves Chevallier for the report! (GH #522) Don't ignore directories that are specified as command line targets (GH #524) Fix a bug where a regular expression that matches the empty string could cause ack to go into an infinite loop (GH #542) [INTERNALS] Add minimal requirement of Getopt::Long 2.38, not 2.35, for GetOptionsFromString. Added test to test --output. Thanks, Varadinsky! (GH #587, GH #590) Added test to make sure subdirs of target subdirs are ignored if --ignore-dir applies to them. Thanks, Pete Houston. (GH #570) Many optimizations and code cleanups. Thanks, Stephan Hohe. Fixed an out-of-date FAQ entry. Thanks, Jakub Wilk. (GH #580) [DOCUMENTATION] Expanded the explanation of how the -w flag works. Thanks, Ed Avis. (GH #585)