exercism-analysis 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (579) hide show
  1. checksums.yaml +7 -0
  2. data/exercism-analysis.gemspec +30 -0
  3. data/lib/exercism-analysis.rb +38 -0
  4. data/lib/exercism-analysis/adapters/adapter.rb +23 -0
  5. data/lib/exercism-analysis/adapters/clojure.rb +13 -0
  6. data/lib/exercism-analysis/adapters/go.rb +19 -0
  7. data/lib/exercism-analysis/adapters/javascript.rb +13 -0
  8. data/lib/exercism-analysis/adapters/python.rb +13 -0
  9. data/lib/exercism-analysis/adapters/ruby.rb +19 -0
  10. data/lib/exercism-analysis/analysis.rb +18 -0
  11. data/lib/exercism-analysis/analyzers/analyzer.rb +54 -0
  12. data/lib/exercism-analysis/analyzers/clojure/kibit.rb +25 -0
  13. data/lib/exercism-analysis/analyzers/go/golint.rb +23 -0
  14. data/lib/exercism-analysis/analyzers/javascript/jslint.rb +24 -0
  15. data/lib/exercism-analysis/analyzers/python/pylint.rb +24 -0
  16. data/lib/exercism-analysis/analyzers/ruby/control_flow.rb +21 -0
  17. data/lib/exercism-analysis/analyzers/ruby/enumerable_condition.rb +21 -0
  18. data/lib/exercism-analysis/analyzers/ruby/for_loop.rb +29 -0
  19. data/lib/exercism-analysis/analyzers/ruby/indentation.rb +21 -0
  20. data/lib/exercism-analysis/analyzers/ruby/iter_mutation.rb +37 -0
  21. data/lib/exercism-analysis/analyzers/ruby/output.rb +20 -0
  22. data/lib/exercism-analysis/analyzers/ruby/range.rb +28 -0
  23. data/lib/exercism-analysis/analyzers/ruby/roodi.rb +19 -0
  24. data/lib/exercism-analysis/analyzers/ruby/send.rb +25 -0
  25. data/lib/exercism-analysis/analyzers/ruby/shebang.rb +23 -0
  26. data/lib/exercism-analysis/analyzers/ruby/tab.rb +38 -0
  27. data/lib/exercism-analysis/processors/call_processor.rb +39 -0
  28. data/lib/exercism-analysis/processors/control_flow_processor.rb +27 -0
  29. data/lib/exercism-analysis/processors/enumerable_condition_processor.rb +31 -0
  30. data/lib/exercism-analysis/processors/for_loop_processor.rb +21 -0
  31. data/lib/exercism-analysis/processors/indentation_processor.rb +69 -0
  32. data/lib/exercism-analysis/processors/iter_mutation_processor.rb +50 -0
  33. data/lib/exercism-analysis/processors/processor.rb +34 -0
  34. data/lib/exercism-analysis/processors/range_processor.rb +23 -0
  35. data/lib/exercism-analysis/processors/send_processor.rb +23 -0
  36. data/lib/exercism-analysis/templates/each_to_map.rb +29 -0
  37. data/lib/exercism-analysis/templates/each_to_select.rb +31 -0
  38. data/lib/exercism-analysis/templates/range_exclusive.rb +19 -0
  39. data/lib/exercism-analysis/templates/template.rb +29 -0
  40. data/vendor/clojure/kibit-runner/LICENSE +214 -0
  41. data/vendor/clojure/kibit-runner/project.clj +10 -0
  42. data/vendor/clojure/kibit-runner/src/kibit_runner/core.clj +17 -0
  43. data/vendor/clojure/kibit-runner/target/kibit-runner-0.1.0-SNAPSHOT-standalone.jar +0 -0
  44. data/vendor/clojure/kibit-runner/target/kibit-runner-0.1.0-SNAPSHOT.jar +0 -0
  45. data/vendor/clojure/kibit-runner/target/stale/extract-native.dependencies +1 -0
  46. data/vendor/go/src/github.com/golang/lint/LICENSE +27 -0
  47. data/vendor/go/src/github.com/golang/lint/README +59 -0
  48. data/vendor/go/src/github.com/golang/lint/golint/golint.go +67 -0
  49. data/vendor/go/src/github.com/golang/lint/lint.go +1061 -0
  50. data/vendor/go/src/runner/golint_runner.go +23 -0
  51. data/vendor/javascript/jshint_runner.js +6 -0
  52. data/vendor/javascript/node_modules/jshint/README.md +47 -0
  53. data/vendor/javascript/node_modules/jshint/bin/apply +6 -0
  54. data/vendor/javascript/node_modules/jshint/bin/build +36 -0
  55. data/vendor/javascript/node_modules/jshint/bin/changelog +36 -0
  56. data/vendor/javascript/node_modules/jshint/bin/jshint +3 -0
  57. data/vendor/javascript/node_modules/jshint/bin/land +34 -0
  58. data/vendor/javascript/node_modules/jshint/data/ascii-identifier-data.js +22 -0
  59. data/vendor/javascript/node_modules/jshint/data/non-ascii-identifier-part-only.js +1570 -0
  60. data/vendor/javascript/node_modules/jshint/data/non-ascii-identifier-start.js +48477 -0
  61. data/vendor/javascript/node_modules/jshint/dist/jshint-rhino.js +60642 -0
  62. data/vendor/javascript/node_modules/jshint/dist/jshint.js +60525 -0
  63. data/vendor/javascript/node_modules/jshint/node_modules/cli/README.md +196 -0
  64. data/vendor/javascript/node_modules/jshint/node_modules/cli/cli.js +1139 -0
  65. data/vendor/javascript/node_modules/jshint/node_modules/cli/examples/cat.js +17 -0
  66. data/vendor/javascript/node_modules/jshint/node_modules/cli/examples/command.js +16 -0
  67. data/vendor/javascript/node_modules/jshint/node_modules/cli/examples/echo.js +54 -0
  68. data/vendor/javascript/node_modules/jshint/node_modules/cli/examples/glob.js +6 -0
  69. data/vendor/javascript/node_modules/jshint/node_modules/cli/examples/long_desc.js +20 -0
  70. data/vendor/javascript/node_modules/jshint/node_modules/cli/examples/progress.js +11 -0
  71. data/vendor/javascript/node_modules/jshint/node_modules/cli/examples/sort.js +18 -0
  72. data/vendor/javascript/node_modules/jshint/node_modules/cli/examples/spinner.js +9 -0
  73. data/vendor/javascript/node_modules/jshint/node_modules/cli/examples/static.coffee +27 -0
  74. data/vendor/javascript/node_modules/jshint/node_modules/cli/examples/static.js +25 -0
  75. data/vendor/javascript/node_modules/jshint/node_modules/cli/index.js +1 -0
  76. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/LICENSE +27 -0
  77. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/README.md +250 -0
  78. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/examples/g.js +9 -0
  79. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/examples/usr-local.js +9 -0
  80. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/glob.js +728 -0
  81. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/LICENSE +16 -0
  82. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/README.md +42 -0
  83. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/inherits.js +1 -0
  84. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/inherits_browser.js +23 -0
  85. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/package.json +51 -0
  86. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/test.js +25 -0
  87. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/package.json +58 -0
  88. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/00-setup.js +176 -0
  89. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/bash-comparison.js +63 -0
  90. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/bash-results.json +351 -0
  91. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/cwd-test.js +55 -0
  92. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/globstar-match.js +19 -0
  93. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/mark.js +118 -0
  94. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/new-glob-optional-options.js +10 -0
  95. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/nocase-nomagic.js +113 -0
  96. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/pause-resume.js +73 -0
  97. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/readme-issue.js +36 -0
  98. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/root-nomount.js +39 -0
  99. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/root.js +46 -0
  100. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/stat.js +32 -0
  101. data/vendor/javascript/node_modules/jshint/node_modules/cli/node_modules/glob/test/zz-cleanup.js +11 -0
  102. data/vendor/javascript/node_modules/jshint/node_modules/cli/package.json +70 -0
  103. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/LICENCE +19 -0
  104. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/README.md +33 -0
  105. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/index.js +86 -0
  106. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/node_modules/date-now/LICENCE +19 -0
  107. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/node_modules/date-now/README.md +45 -0
  108. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/node_modules/date-now/index.js +5 -0
  109. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/node_modules/date-now/package.json +89 -0
  110. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/node_modules/date-now/seed.js +16 -0
  111. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/node_modules/date-now/test/index.js +28 -0
  112. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/node_modules/date-now/test/static/index.html +10 -0
  113. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/package.json +88 -0
  114. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/test/index.js +67 -0
  115. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/test/static/index.html +12 -0
  116. data/vendor/javascript/node_modules/jshint/node_modules/console-browserify/test/static/test-adapter.js +53 -0
  117. data/vendor/javascript/node_modules/jshint/node_modules/exit/Gruntfile.js +48 -0
  118. data/vendor/javascript/node_modules/jshint/node_modules/exit/LICENSE-MIT +22 -0
  119. data/vendor/javascript/node_modules/jshint/node_modules/exit/README.md +75 -0
  120. data/vendor/javascript/node_modules/jshint/node_modules/exit/lib/exit.js +41 -0
  121. data/vendor/javascript/node_modules/jshint/node_modules/exit/package.json +69 -0
  122. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/exit_test.js +121 -0
  123. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/10-stderr.txt +10 -0
  124. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/10-stdout-stderr.txt +20 -0
  125. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/10-stdout.txt +10 -0
  126. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/100-stderr.txt +100 -0
  127. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/100-stdout-stderr.txt +200 -0
  128. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/100-stdout.txt +100 -0
  129. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/1000-stderr.txt +1000 -0
  130. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/1000-stdout-stderr.txt +2000 -0
  131. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/1000-stdout.txt +1000 -0
  132. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/create-files.sh +8 -0
  133. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/log-broken.js +23 -0
  134. data/vendor/javascript/node_modules/jshint/node_modules/exit/test/fixtures/log.js +25 -0
  135. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/LICENSE +18 -0
  136. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/README.md +83 -0
  137. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/lib/CollectingHandler.js +55 -0
  138. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/lib/FeedHandler.js +95 -0
  139. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/lib/Parser.js +337 -0
  140. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/lib/ProxyHandler.js +27 -0
  141. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/lib/Stream.js +35 -0
  142. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/lib/Tokenizer.js +891 -0
  143. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/lib/WritableStream.js +21 -0
  144. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/lib/index.js +68 -0
  145. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domelementtype/LICENSE +11 -0
  146. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domelementtype/index.js +14 -0
  147. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domelementtype/package.json +40 -0
  148. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domelementtype/readme.md +1 -0
  149. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/LICENSE +11 -0
  150. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/index.js +211 -0
  151. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/package.json +68 -0
  152. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/readme.md +102 -0
  153. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/01-basic.json +57 -0
  154. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/02-single_tag_1.json +21 -0
  155. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/03-single_tag_2.json +21 -0
  156. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/04-unescaped_in_script.json +27 -0
  157. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/05-tags_in_comment.json +18 -0
  158. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/06-comment_in_script.json +18 -0
  159. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/07-unescaped_in_style.json +20 -0
  160. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/08-extra_spaces_in_tag.json +20 -0
  161. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/09-unquoted_attrib.json +20 -0
  162. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/10-singular_attribute.json +15 -0
  163. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/11-text_outside_tags.json +40 -0
  164. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/12-text_only.json +11 -0
  165. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/13-comment_in_text.json +19 -0
  166. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/14-comment_in_text_in_script.json +18 -0
  167. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/15-non-verbose.json +22 -0
  168. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/16-normalize_whitespace.json +47 -0
  169. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/17-xml_namespace.json +18 -0
  170. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/18-enforce_empty_tags.json +16 -0
  171. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/19-ignore_empty_tags.json +20 -0
  172. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/20-template_script_tags.json +20 -0
  173. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/21-conditional_comments.json +15 -0
  174. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/22-lowercase_tags.json +41 -0
  175. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/cases/23-dom-lvl1.json +121 -0
  176. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domhandler/test/tests.js +58 -0
  177. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/LICENSE +11 -0
  178. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/index.js +14 -0
  179. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/lib/helpers.js +141 -0
  180. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/lib/legacy.js +87 -0
  181. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/lib/manipulation.js +77 -0
  182. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/lib/querying.js +94 -0
  183. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/lib/stringify.js +93 -0
  184. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/lib/traversal.js +24 -0
  185. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/package.json +71 -0
  186. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/readme.md +1 -0
  187. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/test/fixture.js +6 -0
  188. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/test/tests/helpers.js +89 -0
  189. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/test/tests/legacy.js +119 -0
  190. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/domutils/test/utils.js +9 -0
  191. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/LICENSE +11 -0
  192. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/index.js +31 -0
  193. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/lib/decode.js +72 -0
  194. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/lib/decode_codepoint.js +26 -0
  195. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/lib/encode.js +48 -0
  196. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/maps/decode.json +1 -0
  197. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/maps/entities.json +1 -0
  198. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/maps/legacy.json +1 -0
  199. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/maps/xml.json +1 -0
  200. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/package.json +79 -0
  201. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/readme.md +31 -0
  202. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/test/mocha.opts +2 -0
  203. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/entities/test/test.js +150 -0
  204. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/LICENSE +18 -0
  205. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/README.md +15 -0
  206. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/duplex.js +1 -0
  207. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/float.patch +923 -0
  208. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/lib/_stream_duplex.js +89 -0
  209. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/lib/_stream_passthrough.js +46 -0
  210. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/lib/_stream_readable.js +944 -0
  211. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/lib/_stream_transform.js +209 -0
  212. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/lib/_stream_writable.js +472 -0
  213. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/core-util-is/README.md +3 -0
  214. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/core-util-is/float.patch +604 -0
  215. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/core-util-is/lib/util.js +107 -0
  216. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/core-util-is/package.json +53 -0
  217. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/core-util-is/util.js +106 -0
  218. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/inherits/LICENSE +16 -0
  219. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/inherits/README.md +42 -0
  220. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/inherits/inherits.js +1 -0
  221. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/inherits/inherits_browser.js +23 -0
  222. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/inherits/package.json +51 -0
  223. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/inherits/test.js +25 -0
  224. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/isarray/README.md +54 -0
  225. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/isarray/build/build.js +209 -0
  226. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/isarray/component.json +19 -0
  227. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/isarray/index.js +3 -0
  228. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/isarray/package.json +54 -0
  229. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/string_decoder/LICENSE +20 -0
  230. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/string_decoder/README.md +7 -0
  231. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/string_decoder/index.js +200 -0
  232. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/node_modules/string_decoder/package.json +53 -0
  233. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/package.json +68 -0
  234. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/passthrough.js +1 -0
  235. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/readable.js +7 -0
  236. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/transform.js +1 -0
  237. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/node_modules/readable-stream/writable.js +1 -0
  238. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/package.json +90 -0
  239. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/01-events.js +9 -0
  240. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/02-stream.js +23 -0
  241. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/03-feed.js +19 -0
  242. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Documents/Atom_Example.xml +25 -0
  243. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Documents/Attributes.html +16 -0
  244. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Documents/Basic.html +1 -0
  245. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Documents/RDF_Example.xml +63 -0
  246. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Documents/RSS_Example.xml +48 -0
  247. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/01-simple.json +44 -0
  248. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/02-template.json +63 -0
  249. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/03-lowercase_tags.json +46 -0
  250. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/04-cdata.json +50 -0
  251. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/05-cdata-special.json +35 -0
  252. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/06-leading-lt.json +16 -0
  253. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/07-self-closing.json +67 -0
  254. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/08-implicit-close-tags.json +59 -0
  255. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/09-attributes.json +68 -0
  256. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/10-crazy-attrib.json +52 -0
  257. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/11-script_in_script.json +54 -0
  258. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/12-long-comment-end.json +20 -0
  259. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/13-long-cdata-end.json +22 -0
  260. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/14-implicit-open-tags.json +27 -0
  261. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/15-lt-whitespace.json +16 -0
  262. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/16-double_attribs.json +45 -0
  263. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/17-numeric_entities.json +16 -0
  264. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/18-legacy_entities.json +16 -0
  265. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/19-named_entities.json +16 -0
  266. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/20-xml_entities.json +16 -0
  267. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/21-entity_in_attribute.json +38 -0
  268. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/22-double_brackets.json +41 -0
  269. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/23-legacy_entity_fail.json +16 -0
  270. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/24-special_special.json +133 -0
  271. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/25-empty_tag_name.json +13 -0
  272. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/26-not-quite-closed.json +35 -0
  273. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/27-entities_in_attributes.json +62 -0
  274. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/28-cdata_in_html.json +9 -0
  275. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/29-comment_edge-cases.json +18 -0
  276. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Events/30-cdata_edge-cases.json +22 -0
  277. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Feeds/01-rss.js +34 -0
  278. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Feeds/02-atom.js +18 -0
  279. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Feeds/03-rdf.js +20 -0
  280. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Stream/01-basic.json +83 -0
  281. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Stream/02-RSS.json +1093 -0
  282. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Stream/03-Atom.json +644 -0
  283. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Stream/04-RDF.json +1399 -0
  284. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/Stream/05-Attributes.json +354 -0
  285. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/api.js +63 -0
  286. data/vendor/javascript/node_modules/jshint/node_modules/htmlparser2/test/test-helper.js +83 -0
  287. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/LICENSE +23 -0
  288. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/README.md +218 -0
  289. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/minimatch.js +1061 -0
  290. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS +14 -0
  291. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/LICENSE +23 -0
  292. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/README.md +97 -0
  293. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +252 -0
  294. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/package.json +50 -0
  295. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/test/basic.js +369 -0
  296. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/test/foreach.js +52 -0
  297. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js +50 -0
  298. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/LICENSE +27 -0
  299. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/README.md +53 -0
  300. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/bench.js +283 -0
  301. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/package.json +58 -0
  302. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/sigmund.js +39 -0
  303. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/test/basic.js +24 -0
  304. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/package.json +57 -0
  305. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/test/basic.js +399 -0
  306. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/test/brace-expand.js +33 -0
  307. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/test/caching.js +14 -0
  308. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/test/defaults.js +274 -0
  309. data/vendor/javascript/node_modules/jshint/node_modules/minimatch/test/extglob-ending-with-state-char.js +8 -0
  310. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/LICENSE +26 -0
  311. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/README.md +569 -0
  312. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/bin/shjs +51 -0
  313. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/global.js +3 -0
  314. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/make.js +47 -0
  315. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/package.json +61 -0
  316. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/scripts/generate-docs.js +21 -0
  317. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/scripts/run-tests.js +50 -0
  318. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/shell.js +157 -0
  319. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/cat.js +43 -0
  320. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/cd.js +19 -0
  321. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/chmod.js +208 -0
  322. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/common.js +203 -0
  323. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/cp.js +201 -0
  324. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/dirs.js +191 -0
  325. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/echo.js +20 -0
  326. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/error.js +10 -0
  327. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/exec.js +181 -0
  328. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/find.js +51 -0
  329. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/grep.js +52 -0
  330. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/ln.js +53 -0
  331. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/ls.js +126 -0
  332. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/mkdir.js +68 -0
  333. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/mv.js +80 -0
  334. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/popd.js +1 -0
  335. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/pushd.js +1 -0
  336. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/pwd.js +11 -0
  337. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/rm.js +145 -0
  338. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/sed.js +43 -0
  339. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/tempdir.js +56 -0
  340. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/test.js +85 -0
  341. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/to.js +29 -0
  342. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/toEnd.js +29 -0
  343. data/vendor/javascript/node_modules/jshint/node_modules/shelljs/src/which.js +83 -0
  344. data/vendor/javascript/node_modules/jshint/node_modules/strip-json-comments/cli.js +41 -0
  345. data/vendor/javascript/node_modules/jshint/node_modules/strip-json-comments/package.json +76 -0
  346. data/vendor/javascript/node_modules/jshint/node_modules/strip-json-comments/readme.md +74 -0
  347. data/vendor/javascript/node_modules/jshint/node_modules/strip-json-comments/strip-json-comments.js +64 -0
  348. data/vendor/javascript/node_modules/jshint/node_modules/underscore/LICENSE +23 -0
  349. data/vendor/javascript/node_modules/jshint/node_modules/underscore/README.md +22 -0
  350. data/vendor/javascript/node_modules/jshint/node_modules/underscore/package.json +66 -0
  351. data/vendor/javascript/node_modules/jshint/node_modules/underscore/underscore-min.js +6 -0
  352. data/vendor/javascript/node_modules/jshint/node_modules/underscore/underscore.js +1343 -0
  353. data/vendor/javascript/node_modules/jshint/package.json +80 -0
  354. data/vendor/javascript/node_modules/jshint/src/cli.js +731 -0
  355. data/vendor/javascript/node_modules/jshint/src/jshint.js +5023 -0
  356. data/vendor/javascript/node_modules/jshint/src/lex.js +1650 -0
  357. data/vendor/javascript/node_modules/jshint/src/messages.js +223 -0
  358. data/vendor/javascript/node_modules/jshint/src/platforms/rhino.js +115 -0
  359. data/vendor/javascript/node_modules/jshint/src/reg.js +38 -0
  360. data/vendor/javascript/node_modules/jshint/src/reporters/checkstyle.js +81 -0
  361. data/vendor/javascript/node_modules/jshint/src/reporters/default.js +34 -0
  362. data/vendor/javascript/node_modules/jshint/src/reporters/jslint_xml.js +57 -0
  363. data/vendor/javascript/node_modules/jshint/src/reporters/non_error.js +52 -0
  364. data/vendor/javascript/node_modules/jshint/src/state.js +28 -0
  365. data/vendor/javascript/node_modules/jshint/src/style.js +143 -0
  366. data/vendor/javascript/node_modules/jshint/src/vars.js +658 -0
  367. data/vendor/python/astroid/COPYING +339 -0
  368. data/vendor/python/astroid/COPYING.LESSER +510 -0
  369. data/vendor/python/astroid/ChangeLog +574 -0
  370. data/vendor/python/astroid/MANIFEST.in +9 -0
  371. data/vendor/python/astroid/README +56 -0
  372. data/vendor/python/astroid/README.Python3 +26 -0
  373. data/vendor/python/astroid/__init__.py +118 -0
  374. data/vendor/python/astroid/__init__.pyc +0 -0
  375. data/vendor/python/astroid/__pkginfo__.py +48 -0
  376. data/vendor/python/astroid/__pkginfo__.pyc +0 -0
  377. data/vendor/python/astroid/announce.txt +23 -0
  378. data/vendor/python/astroid/as_string.py +496 -0
  379. data/vendor/python/astroid/as_string.pyc +0 -0
  380. data/vendor/python/astroid/bases.py +618 -0
  381. data/vendor/python/astroid/bases.pyc +0 -0
  382. data/vendor/python/astroid/brain/py2gi.py +159 -0
  383. data/vendor/python/astroid/brain/py2gi.pyc +0 -0
  384. data/vendor/python/astroid/brain/py2mechanize.py +20 -0
  385. data/vendor/python/astroid/brain/py2mechanize.pyc +0 -0
  386. data/vendor/python/astroid/brain/py2qt4.py +25 -0
  387. data/vendor/python/astroid/brain/py2qt4.pyc +0 -0
  388. data/vendor/python/astroid/brain/py2stdlib.py +252 -0
  389. data/vendor/python/astroid/brain/py2stdlib.pyc +0 -0
  390. data/vendor/python/astroid/builder.py +238 -0
  391. data/vendor/python/astroid/builder.pyc +0 -0
  392. data/vendor/python/astroid/exceptions.py +51 -0
  393. data/vendor/python/astroid/exceptions.pyc +0 -0
  394. data/vendor/python/astroid/inference.py +393 -0
  395. data/vendor/python/astroid/inference.pyc +0 -0
  396. data/vendor/python/astroid/inspector.py +275 -0
  397. data/vendor/python/astroid/manager.py +336 -0
  398. data/vendor/python/astroid/manager.pyc +0 -0
  399. data/vendor/python/astroid/mixins.py +122 -0
  400. data/vendor/python/astroid/mixins.pyc +0 -0
  401. data/vendor/python/astroid/node_classes.py +928 -0
  402. data/vendor/python/astroid/node_classes.pyc +0 -0
  403. data/vendor/python/astroid/nodes.py +73 -0
  404. data/vendor/python/astroid/nodes.pyc +0 -0
  405. data/vendor/python/astroid/protocols.py +322 -0
  406. data/vendor/python/astroid/protocols.pyc +0 -0
  407. data/vendor/python/astroid/raw_building.py +361 -0
  408. data/vendor/python/astroid/raw_building.pyc +0 -0
  409. data/vendor/python/astroid/rebuilder.py +954 -0
  410. data/vendor/python/astroid/rebuilder.pyc +0 -0
  411. data/vendor/python/astroid/scoped_nodes.py +1118 -0
  412. data/vendor/python/astroid/scoped_nodes.pyc +0 -0
  413. data/vendor/python/astroid/setup.py +184 -0
  414. data/vendor/python/astroid/tox.ini +10 -0
  415. data/vendor/python/astroid/utils.py +236 -0
  416. data/vendor/python/astroid/utils.pyc +0 -0
  417. data/vendor/python/logilab/__init__.py +0 -0
  418. data/vendor/python/logilab/__init__.pyc +0 -0
  419. data/vendor/python/logilab/common/COPYING +339 -0
  420. data/vendor/python/logilab/common/COPYING.LESSER +510 -0
  421. data/vendor/python/logilab/common/ChangeLog +1517 -0
  422. data/vendor/python/logilab/common/MANIFEST.in +13 -0
  423. data/vendor/python/logilab/common/README +185 -0
  424. data/vendor/python/logilab/common/README.Python3 +29 -0
  425. data/vendor/python/logilab/common/__init__.py +171 -0
  426. data/vendor/python/logilab/common/__init__.pyc +0 -0
  427. data/vendor/python/logilab/common/__pkginfo__.py +53 -0
  428. data/vendor/python/logilab/common/__pkginfo__.pyc +0 -0
  429. data/vendor/python/logilab/common/announce.txt +25 -0
  430. data/vendor/python/logilab/common/bin/pytest +7 -0
  431. data/vendor/python/logilab/common/bin/pytest.bat +17 -0
  432. data/vendor/python/logilab/common/cache.py +114 -0
  433. data/vendor/python/logilab/common/changelog.py +236 -0
  434. data/vendor/python/logilab/common/changelog.pyc +0 -0
  435. data/vendor/python/logilab/common/clcommands.py +332 -0
  436. data/vendor/python/logilab/common/cli.py +208 -0
  437. data/vendor/python/logilab/common/compat.py +243 -0
  438. data/vendor/python/logilab/common/compat.pyc +0 -0
  439. data/vendor/python/logilab/common/configuration.py +1094 -0
  440. data/vendor/python/logilab/common/configuration.pyc +0 -0
  441. data/vendor/python/logilab/common/contexts.py +5 -0
  442. data/vendor/python/logilab/common/corbautils.py +117 -0
  443. data/vendor/python/logilab/common/daemon.py +100 -0
  444. data/vendor/python/logilab/common/date.py +333 -0
  445. data/vendor/python/logilab/common/dbf.py +229 -0
  446. data/vendor/python/logilab/common/debugger.py +210 -0
  447. data/vendor/python/logilab/common/decorators.py +281 -0
  448. data/vendor/python/logilab/common/decorators.pyc +0 -0
  449. data/vendor/python/logilab/common/deprecation.py +188 -0
  450. data/vendor/python/logilab/common/deprecation.pyc +0 -0
  451. data/vendor/python/logilab/common/fileutils.py +402 -0
  452. data/vendor/python/logilab/common/graph.py +276 -0
  453. data/vendor/python/logilab/common/graph.pyc +0 -0
  454. data/vendor/python/logilab/common/hg.py +130 -0
  455. data/vendor/python/logilab/common/interface.py +71 -0
  456. data/vendor/python/logilab/common/interface.pyc +0 -0
  457. data/vendor/python/logilab/common/logging_ext.py +193 -0
  458. data/vendor/python/logilab/common/modutils.py +695 -0
  459. data/vendor/python/logilab/common/modutils.pyc +0 -0
  460. data/vendor/python/logilab/common/optik_ext.py +391 -0
  461. data/vendor/python/logilab/common/optik_ext.pyc +0 -0
  462. data/vendor/python/logilab/common/optparser.py +90 -0
  463. data/vendor/python/logilab/common/proc.py +277 -0
  464. data/vendor/python/logilab/common/pyro_ext.py +180 -0
  465. data/vendor/python/logilab/common/pytest.py +1177 -0
  466. data/vendor/python/logilab/common/python-logilab-common.spec +184 -0
  467. data/vendor/python/logilab/common/registry.py +1113 -0
  468. data/vendor/python/logilab/common/setup.cfg +3 -0
  469. data/vendor/python/logilab/common/setup.py +189 -0
  470. data/vendor/python/logilab/common/shellutils.py +455 -0
  471. data/vendor/python/logilab/common/sphinx_ext.py +87 -0
  472. data/vendor/python/logilab/common/sphinxutils.py +122 -0
  473. data/vendor/python/logilab/common/table.py +925 -0
  474. data/vendor/python/logilab/common/tasksqueue.py +100 -0
  475. data/vendor/python/logilab/common/textutils.py +534 -0
  476. data/vendor/python/logilab/common/textutils.pyc +0 -0
  477. data/vendor/python/logilab/common/tree.py +369 -0
  478. data/vendor/python/logilab/common/tree.pyc +0 -0
  479. data/vendor/python/logilab/common/umessage.py +190 -0
  480. data/vendor/python/logilab/common/ureports/__init__.py +174 -0
  481. data/vendor/python/logilab/common/ureports/__init__.pyc +0 -0
  482. data/vendor/python/logilab/common/ureports/docbook_writer.py +139 -0
  483. data/vendor/python/logilab/common/ureports/html_writer.py +131 -0
  484. data/vendor/python/logilab/common/ureports/html_writer.pyc +0 -0
  485. data/vendor/python/logilab/common/ureports/nodes.py +201 -0
  486. data/vendor/python/logilab/common/ureports/nodes.pyc +0 -0
  487. data/vendor/python/logilab/common/ureports/text_writer.py +140 -0
  488. data/vendor/python/logilab/common/ureports/text_writer.pyc +0 -0
  489. data/vendor/python/logilab/common/urllib2ext.py +87 -0
  490. data/vendor/python/logilab/common/vcgutils.py +216 -0
  491. data/vendor/python/logilab/common/visitor.py +107 -0
  492. data/vendor/python/logilab/common/visitor.pyc +0 -0
  493. data/vendor/python/logilab/common/xmlrpcutils.py +131 -0
  494. data/vendor/python/logilab/common/xmlutils.py +61 -0
  495. data/vendor/python/pylint/CONTRIBUTORS.txt +38 -0
  496. data/vendor/python/pylint/COPYING +340 -0
  497. data/vendor/python/pylint/ChangeLog +1437 -0
  498. data/vendor/python/pylint/DEPENDS +3 -0
  499. data/vendor/python/pylint/MANIFEST.in +14 -0
  500. data/vendor/python/pylint/README +50 -0
  501. data/vendor/python/pylint/README.Python3 +37 -0
  502. data/vendor/python/pylint/__init__.py +44 -0
  503. data/vendor/python/pylint/__init__.pyc +0 -0
  504. data/vendor/python/pylint/__main__.py +3 -0
  505. data/vendor/python/pylint/__pkginfo__.py +74 -0
  506. data/vendor/python/pylint/__pkginfo__.pyc +0 -0
  507. data/vendor/python/pylint/bin/epylint +3 -0
  508. data/vendor/python/pylint/bin/epylint.bat +5 -0
  509. data/vendor/python/pylint/bin/pylint +3 -0
  510. data/vendor/python/pylint/bin/pylint-gui +3 -0
  511. data/vendor/python/pylint/bin/pylint-gui.bat +5 -0
  512. data/vendor/python/pylint/bin/pylint.bat +5 -0
  513. data/vendor/python/pylint/bin/pyreverse +3 -0
  514. data/vendor/python/pylint/bin/pyreverse.bat +5 -0
  515. data/vendor/python/pylint/bin/symilar +3 -0
  516. data/vendor/python/pylint/bin/symilar.bat +5 -0
  517. data/vendor/python/pylint/checkers/__init__.py +145 -0
  518. data/vendor/python/pylint/checkers/__init__.pyc +0 -0
  519. data/vendor/python/pylint/checkers/base.py +1141 -0
  520. data/vendor/python/pylint/checkers/base.pyc +0 -0
  521. data/vendor/python/pylint/checkers/classes.py +792 -0
  522. data/vendor/python/pylint/checkers/classes.pyc +0 -0
  523. data/vendor/python/pylint/checkers/design_analysis.py +367 -0
  524. data/vendor/python/pylint/checkers/design_analysis.pyc +0 -0
  525. data/vendor/python/pylint/checkers/exceptions.py +306 -0
  526. data/vendor/python/pylint/checkers/exceptions.pyc +0 -0
  527. data/vendor/python/pylint/checkers/format.py +943 -0
  528. data/vendor/python/pylint/checkers/format.pyc +0 -0
  529. data/vendor/python/pylint/checkers/imports.py +394 -0
  530. data/vendor/python/pylint/checkers/imports.pyc +0 -0
  531. data/vendor/python/pylint/checkers/logging.py +213 -0
  532. data/vendor/python/pylint/checkers/logging.pyc +0 -0
  533. data/vendor/python/pylint/checkers/misc.py +90 -0
  534. data/vendor/python/pylint/checkers/misc.pyc +0 -0
  535. data/vendor/python/pylint/checkers/newstyle.py +151 -0
  536. data/vendor/python/pylint/checkers/newstyle.pyc +0 -0
  537. data/vendor/python/pylint/checkers/raw_metrics.py +129 -0
  538. data/vendor/python/pylint/checkers/raw_metrics.pyc +0 -0
  539. data/vendor/python/pylint/checkers/similar.py +365 -0
  540. data/vendor/python/pylint/checkers/similar.pyc +0 -0
  541. data/vendor/python/pylint/checkers/stdlib.py +69 -0
  542. data/vendor/python/pylint/checkers/stdlib.pyc +0 -0
  543. data/vendor/python/pylint/checkers/strings.py +304 -0
  544. data/vendor/python/pylint/checkers/strings.pyc +0 -0
  545. data/vendor/python/pylint/checkers/typecheck.py +451 -0
  546. data/vendor/python/pylint/checkers/typecheck.pyc +0 -0
  547. data/vendor/python/pylint/checkers/utils.py +416 -0
  548. data/vendor/python/pylint/checkers/utils.pyc +0 -0
  549. data/vendor/python/pylint/checkers/variables.py +741 -0
  550. data/vendor/python/pylint/checkers/variables.pyc +0 -0
  551. data/vendor/python/pylint/config.py +156 -0
  552. data/vendor/python/pylint/config.pyc +0 -0
  553. data/vendor/python/pylint/epylint.py +175 -0
  554. data/vendor/python/pylint/gui.py +508 -0
  555. data/vendor/python/pylint/interfaces.py +72 -0
  556. data/vendor/python/pylint/interfaces.pyc +0 -0
  557. data/vendor/python/pylint/lint.py +1106 -0
  558. data/vendor/python/pylint/lint.pyc +0 -0
  559. data/vendor/python/pylint/pyreverse/__init__.py +5 -0
  560. data/vendor/python/pylint/pyreverse/diadefslib.py +233 -0
  561. data/vendor/python/pylint/pyreverse/diagrams.py +247 -0
  562. data/vendor/python/pylint/pyreverse/main.py +124 -0
  563. data/vendor/python/pylint/pyreverse/utils.py +131 -0
  564. data/vendor/python/pylint/pyreverse/writer.py +199 -0
  565. data/vendor/python/pylint/reporters/__init__.py +138 -0
  566. data/vendor/python/pylint/reporters/__init__.pyc +0 -0
  567. data/vendor/python/pylint/reporters/guireporter.py +28 -0
  568. data/vendor/python/pylint/reporters/guireporter.pyc +0 -0
  569. data/vendor/python/pylint/reporters/html.py +70 -0
  570. data/vendor/python/pylint/reporters/html.pyc +0 -0
  571. data/vendor/python/pylint/reporters/text.py +143 -0
  572. data/vendor/python/pylint/reporters/text.pyc +0 -0
  573. data/vendor/python/pylint/setup.cfg +3 -0
  574. data/vendor/python/pylint/setup.py +203 -0
  575. data/vendor/python/pylint/tox.ini +10 -0
  576. data/vendor/python/pylint/utils.py +744 -0
  577. data/vendor/python/pylint/utils.pyc +0 -0
  578. data/vendor/python/pylint_runner.py +22 -0
  579. metadata +675 -0
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "jshint",
3
+ "version": "2.5.1",
4
+ "homepage": "http://jshint.com/",
5
+ "description": "Static analysis tool for JavaScript",
6
+ "author": {
7
+ "name": "Anton Kovalyov",
8
+ "email": "anton@kovalyov.net",
9
+ "url": "http://anton.kovalyov.net/"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/jshint/jshint.git"
14
+ },
15
+ "bugs": {
16
+ "url": "https://github.com/jshint/jshint/issues"
17
+ },
18
+ "bin": {
19
+ "jshint": "./bin/jshint"
20
+ },
21
+ "scripts": {
22
+ "data": "node scripts/generate-identifier-data",
23
+ "build": "node bin/build",
24
+ "test": "nodeunit tests tests/regression tests/unit",
25
+ "pretest": "jshint src"
26
+ },
27
+ "main": "./src/jshint.js",
28
+ "dependencies": {
29
+ "shelljs": "0.3.x",
30
+ "underscore": "1.6.x",
31
+ "cli": "0.6.x",
32
+ "minimatch": "0.x.x",
33
+ "htmlparser2": "3.7.x",
34
+ "console-browserify": "1.1.x",
35
+ "exit": "0.1.x",
36
+ "strip-json-comments": "0.1.x"
37
+ },
38
+ "devDependencies": {
39
+ "jshint": "2.5.x",
40
+ "browserify": "4.x",
41
+ "coveraje": "0.2.x",
42
+ "nodeunit": "0.9.x",
43
+ "sinon": "1.9.x",
44
+ "unicode-6.3.0": "0.1.x",
45
+ "regenerate": "0.6.x"
46
+ },
47
+ "licenses": [
48
+ {
49
+ "type": "MIT",
50
+ "url": "https://github.com/jshint/jshint/blob/master/LICENSE"
51
+ }
52
+ ],
53
+ "preferGlobal": true,
54
+ "files": [
55
+ "bin",
56
+ "src",
57
+ "data",
58
+ "dist"
59
+ ],
60
+ "_id": "jshint@2.5.1",
61
+ "dist": {
62
+ "shasum": "8e96d27377806767d40f16676fbec113d33520ec",
63
+ "tarball": "http://registry.npmjs.org/jshint/-/jshint-2.5.1.tgz"
64
+ },
65
+ "_from": "jshint@",
66
+ "_npmVersion": "1.4.6",
67
+ "_npmUser": {
68
+ "name": "antonkovalyov",
69
+ "email": "anton@kovalyov.net"
70
+ },
71
+ "maintainers": [
72
+ {
73
+ "name": "antonkovalyov",
74
+ "email": "anton@kovalyov.net"
75
+ }
76
+ ],
77
+ "directories": {},
78
+ "_shasum": "8e96d27377806767d40f16676fbec113d33520ec",
79
+ "_resolved": "https://registry.npmjs.org/jshint/-/jshint-2.5.1.tgz"
80
+ }
@@ -0,0 +1,731 @@
1
+ "use strict";
2
+
3
+ var _ = require("underscore");
4
+ var fs = require("fs");
5
+ var cli = require("cli");
6
+ var path = require("path");
7
+ var shjs = require("shelljs");
8
+ var minimatch = require("minimatch");
9
+ var htmlparser = require("htmlparser2");
10
+ var exit = require("exit");
11
+ var stripJsonComments = require("strip-json-comments");
12
+ var JSHINT = require("./jshint.js").JSHINT;
13
+ var defReporter = require("./reporters/default").reporter;
14
+
15
+ var OPTIONS = {
16
+ "config": ["c", "Custom configuration file", "string", false ],
17
+ "reporter": ["reporter", "Custom reporter (<PATH>|jslint|checkstyle)", "string", undefined ],
18
+ "exclude": ["exclude",
19
+ "Exclude files matching the given filename pattern (same as .jshintignore)", "string", null],
20
+ "exclude-path": ["exclude-path", "Pass in a custom jshintignore file path", "string", null],
21
+ "filename": ["filename",
22
+ "Pass in a filename when using STDIN to emulate config lookup for that file name",
23
+ "string", null],
24
+ "verbose": ["verbose", "Show message codes"],
25
+ "show-non-errors": ["show-non-errors", "Show additional data generated by jshint"],
26
+ "extra-ext": ["e",
27
+ "Comma-separated list of file extensions to use (default is .js)", "string", ""],
28
+
29
+ "extract": [
30
+ "extract",
31
+ "Extract inline scripts contained in HTML (auto|always|never, default to never)",
32
+ "string",
33
+ "never"
34
+ ],
35
+
36
+ // Deprecated options.
37
+ "jslint-reporter": [
38
+ "jslint-reporter",
39
+ deprecated("Use a jslint compatible reporter", "--reporter=jslint")
40
+ ],
41
+
42
+ "checkstyle-reporter": [
43
+ "checkstyle-reporter",
44
+ deprecated("Use a CheckStyle compatible XML reporter", "--reporter=checkstyle")
45
+ ]
46
+ };
47
+
48
+ /**
49
+ * Returns the same text but with a deprecation notice.
50
+ * Useful for options descriptions.
51
+ *
52
+ * @param {string} text
53
+ * @param {string} alt (optional) Alternative command to include in the
54
+ * deprecation notice.
55
+ *
56
+ * @returns {string}
57
+ */
58
+ function deprecated(text, alt) {
59
+ if (!alt) {
60
+ return text + " (DEPRECATED)";
61
+ }
62
+
63
+ return text + " (DEPRECATED, use " + alt + " instead)";
64
+ }
65
+
66
+ /**
67
+ * Tries to find a configuration file in either project directory
68
+ * or in the home directory. Configuration files are named
69
+ * '.jshintrc'.
70
+ *
71
+ * @param {string} file path to the file to be linted
72
+ * @returns {string} a path to the config file
73
+ */
74
+ function findConfig(file) {
75
+ var dir = path.dirname(path.resolve(file));
76
+ var envs = getHomeDir();
77
+
78
+ if (!envs)
79
+ return home;
80
+
81
+ var home = path.normalize(path.join(envs, ".jshintrc"));
82
+
83
+ var proj = findFile(".jshintrc", dir);
84
+ if (proj)
85
+ return proj;
86
+
87
+ if (shjs.test("-e", home))
88
+ return home;
89
+
90
+ return null;
91
+ }
92
+
93
+ function getHomeDir() {
94
+ var environment = global.process.env;
95
+ var paths = [environment.HOME,
96
+ environment.USERPROFILE,
97
+ environment.HOMEPATH,
98
+ environment.HOMEDRIVE + environment.HOMEPATH];
99
+
100
+ for (var homeIndex in paths)
101
+ if (paths.hasOwnProperty(homeIndex)) {
102
+ var homePath = paths[homeIndex];
103
+
104
+ if (homePath && fs.existsSync(homePath))
105
+ return homePath;
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Tries to find JSHint configuration within a package.json file
111
+ * (if any). It search in the current directory and then goes up
112
+ * all the way to the root just like findFile.
113
+ *
114
+ * @param {string} file path to the file to be linted
115
+ * @returns {object} config object
116
+ */
117
+ function loadNpmConfig(file) {
118
+ var dir = path.dirname(path.resolve(file));
119
+ var fp = findFile("package.json", dir);
120
+
121
+ if (!fp)
122
+ return null;
123
+
124
+ try {
125
+ return require(fp).jshintConfig;
126
+ } catch (e) {
127
+ return null;
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Tries to import a reporter file and returns its reference.
133
+ *
134
+ * @param {string} fp a path to the reporter file
135
+ * @returns {object} imported module for the reporter or 'null'
136
+ * if a module cannot be imported.
137
+ */
138
+ function loadReporter(fp) {
139
+ try {
140
+ return require(fp).reporter;
141
+ } catch (err) {
142
+ return null;
143
+ }
144
+ }
145
+
146
+ // Storage for memoized results from find file
147
+ // Should prevent lots of directory traversal &
148
+ // lookups when liniting an entire project
149
+ var findFileResults = {};
150
+
151
+ /**
152
+ * Searches for a file with a specified name starting with
153
+ * 'dir' and going all the way up either until it finds the file
154
+ * or hits the root.
155
+ *
156
+ * @param {string} name filename to search for (e.g. .jshintrc)
157
+ * @param {string} dir directory to start search from (default:
158
+ * current working directory)
159
+ *
160
+ * @returns {string} normalized filename
161
+ */
162
+ function findFile(name, dir) {
163
+ dir = dir || process.cwd();
164
+
165
+ var filename = path.normalize(path.join(dir, name));
166
+ if (findFileResults[filename] !== undefined) {
167
+ return findFileResults[filename];
168
+ }
169
+
170
+ var parent = path.resolve(dir, "../");
171
+
172
+ if (shjs.test("-e", filename)) {
173
+ findFileResults[filename] = filename;
174
+ return filename;
175
+ }
176
+
177
+ if (dir === parent) {
178
+ findFileResults[filename] = null;
179
+ return null;
180
+ }
181
+
182
+ return findFile(name, parent);
183
+ }
184
+
185
+ /**
186
+ * Loads a list of files that have to be skipped. JSHint assumes that
187
+ * the list is located in a file called '.jshintignore'.
188
+ *
189
+ * @return {array} a list of files to ignore.
190
+ */
191
+ function loadIgnores(exclude, excludePath) {
192
+ var file = findFile(excludePath || ".jshintignore");
193
+
194
+ if (!file && !exclude) {
195
+ return [];
196
+ }
197
+
198
+ var lines = (file ? shjs.cat(file) : "").split("\n");
199
+ lines.unshift(exclude || "");
200
+
201
+ return lines
202
+ .filter(function (line) {
203
+ return !!line.trim();
204
+ })
205
+ .map(function (line) {
206
+ if (line[0] === "!")
207
+ return "!" + path.resolve(path.dirname(file), line.substr(1).trim());
208
+
209
+ return path.join(path.dirname(file), line.trim());
210
+ });
211
+ }
212
+
213
+ /**
214
+ * Checks whether we should ignore a file or not.
215
+ *
216
+ * @param {string} fp a path to a file
217
+ * @param {array} patterns a list of patterns for files to ignore
218
+ *
219
+ * @return {boolean} 'true' if file should be ignored, 'false' otherwise.
220
+ */
221
+ function isIgnored(fp, patterns) {
222
+ return patterns.some(function (ip) {
223
+ if (minimatch(path.resolve(fp), ip, { nocase: true })) {
224
+ return true;
225
+ }
226
+
227
+ if (path.resolve(fp) === ip) {
228
+ return true;
229
+ }
230
+
231
+ if (shjs.test("-d", fp) && ip.match(/^[^\/]*\/?$/) &&
232
+ fp.match(new RegExp("^" + ip + ".*"))) {
233
+ return true;
234
+ }
235
+ });
236
+ }
237
+
238
+ /**
239
+ * Extract JS code from a given source code. The source code my be either HTML
240
+ * code or JS code. In the latter case, no extraction will be done unless
241
+ * 'always' is given.
242
+ *
243
+ * @param {string} code a piece of code
244
+ * @param {string} when 'always' will extract the JS code, no matter what.
245
+ * 'never' won't do anything. 'auto' will check if the code looks like HTML
246
+ * before extracting it.
247
+ *
248
+ * @return {string} the extracted code
249
+ */
250
+ function extract(code, when) {
251
+ // A JS file won't start with a less-than character, whereas a HTML file
252
+ // should always start with that.
253
+ if (when !== "always" && (when !== "auto" || !/^\s*</.test(code)))
254
+ return code;
255
+
256
+ var inscript = false;
257
+ var index = 0;
258
+ var js = [];
259
+ var startOffset;
260
+
261
+ // Test if current tag is a valid <script> tag.
262
+ function onopen(name, attrs) {
263
+ if (name !== "script")
264
+ return;
265
+
266
+ if (attrs.type && !/text\/javascript/.test(attrs.type.toLowerCase()))
267
+ return;
268
+
269
+ // Mark that we're inside a <script> a tag and push all new lines
270
+ // in between the last </script> tag and this <script> tag to preserve
271
+ // location information.
272
+ inscript = true;
273
+ js.push.apply(js, code.slice(index, parser.endIndex).match(/\n\r|\n|\r/g));
274
+ startOffset = null;
275
+ }
276
+
277
+ function onclose(name) {
278
+ if (name !== "script" || !inscript)
279
+ return;
280
+
281
+ inscript = false;
282
+ index = parser.startIndex;
283
+ startOffset = null;
284
+ }
285
+
286
+ function ontext(data) {
287
+ if (!inscript)
288
+ return;
289
+
290
+ var lines = data.split(/\n\r|\n|\r/);
291
+
292
+ if (!startOffset) {
293
+ lines.some(function (line) {
294
+ if (!line) return;
295
+ startOffset = /^(\s*)/.exec(line)[1];
296
+ return true;
297
+ });
298
+ }
299
+
300
+ // check for startOffset again to remove leading white space from first line
301
+ if (startOffset) {
302
+ lines = lines.map(function (line) {
303
+ return line.replace(startOffset, "");
304
+ });
305
+ data = lines.join("\n");
306
+ }
307
+
308
+ js.push(data); // Collect JavaScript code.
309
+ }
310
+
311
+ var parser = new htmlparser.Parser({ onopentag: onopen, onclosetag: onclose, ontext: ontext });
312
+ parser.parseComplete(code);
313
+
314
+ return js.join("");
315
+ }
316
+
317
+ /**
318
+ * Crude version of source maps: extract how much JavaSscript in HTML
319
+ * was shifted based on first JS line. For example if first js line
320
+ * is offset by 4 spaces, each line in this js fragment will have offset 4
321
+ * to restore the original column.
322
+ *
323
+ * @param {string} code a piece of code
324
+ * @param {string} when 'always' will extract the JS code, no matter what.
325
+ * 'never' won't do anything. 'auto' will check if the code looks like HTML
326
+ * before extracting it.
327
+ *
328
+ * @return {Array} extracted offsets
329
+ */
330
+ function extractOffsets(code, when) {
331
+ // A JS file won't start with a less-than character, whereas a HTML file
332
+ // should always start with that.
333
+ if (when !== "always" && (when !== "auto" || !/^\s*</.test(code)))
334
+ return;
335
+
336
+ var inscript = false;
337
+ var index = 0;
338
+ var lineCounter = 0;
339
+ var startOffset;
340
+ var offsets = [];
341
+
342
+ // Test if current tag is a valid <script> tag.
343
+ function onopen(name, attrs) {
344
+ if (name !== "script")
345
+ return;
346
+
347
+ if (attrs.type && !/text\/javascript/.test(attrs.type.toLowerCase()))
348
+ return;
349
+
350
+ // Mark that we're inside a <script> a tag and push all new lines
351
+ // in between the last </script> tag and this <script> tag to preserve
352
+ // location information.
353
+ inscript = true;
354
+ var fragment = code.slice(index, parser.endIndex);
355
+ var n = fragment.match(/\n\r|\n|\r/g).length;
356
+ lineCounter += n;
357
+ startOffset = null;
358
+ }
359
+
360
+ function onclose(name) {
361
+ if (name !== "script" || !inscript)
362
+ return;
363
+
364
+ inscript = false;
365
+ index = parser.startIndex;
366
+ startOffset = null;
367
+ }
368
+
369
+ function ontext(data) {
370
+ if (!inscript)
371
+ return;
372
+
373
+ var lines = data.split(/\n\r|\n|\r/);
374
+
375
+ if (!startOffset) {
376
+ lines.some(function (line) {
377
+ if (!line) return;
378
+ startOffset = /^(\s*)/.exec(line)[1];
379
+ return true;
380
+ });
381
+ }
382
+
383
+ // check for startOffset again to remove leading white space from first line
384
+ lines.forEach(function () {
385
+ lineCounter += 1;
386
+ if (startOffset) {
387
+ offsets[lineCounter] = startOffset.length;
388
+ } else {
389
+ offsets[lineCounter] = 0;
390
+ }
391
+ });
392
+ }
393
+
394
+ var parser = new htmlparser.Parser({ onopentag: onopen, onclosetag: onclose, ontext: ontext });
395
+ parser.parseComplete(code);
396
+ return offsets;
397
+ }
398
+
399
+ /**
400
+ * Recursively gather all files that need to be linted,
401
+ * excluding those that user asked to ignore.
402
+ *
403
+ * @param {string} fp a path to a file or directory to lint
404
+ * @param {array} files a pointer to an array that stores a list of files
405
+ * @param {array} ignores a list of patterns for files to ignore
406
+ * @param {array} ext a list of non-dot-js extensions to lint
407
+ */
408
+ function collect(fp, files, ignores, ext) {
409
+ if (ignores && isIgnored(fp, ignores)) {
410
+ return;
411
+ }
412
+
413
+ if (!shjs.test("-e", fp)) {
414
+ cli.error("Can't open " + fp);
415
+ return;
416
+ }
417
+
418
+ if (shjs.test("-d", fp)) {
419
+ shjs.ls(fp).forEach(function (item) {
420
+ var itempath = path.join(fp, item);
421
+ if (shjs.test("-d", itempath) || item.match(ext)) {
422
+ collect(itempath, files, ignores, ext);
423
+ }
424
+ });
425
+
426
+ return;
427
+ }
428
+
429
+ files.push(fp);
430
+ }
431
+
432
+ /**
433
+ * Runs JSHint against provided file and saves the result
434
+ *
435
+ * @param {string} code code that needs to be linted
436
+ * @param {object} results a pointer to an object with results
437
+ * @param {object} config an object with JSHint configuration
438
+ * @param {object} data a pointer to an object with extra data
439
+ * @param {string} file (optional) file name that is being linted
440
+ */
441
+ function lint(code, results, config, data, file) {
442
+ var globals;
443
+ var lintData;
444
+ var buffer = [];
445
+
446
+ config = config || {};
447
+ config = JSON.parse(JSON.stringify(config));
448
+
449
+ if (config.prereq) {
450
+ config.prereq.forEach(function (fp) {
451
+ fp = path.join(config.dirname, fp);
452
+ if (shjs.test("-e", fp))
453
+ buffer.push(shjs.cat(fp));
454
+ });
455
+ delete config.prereq;
456
+ }
457
+
458
+ if (config.globals) {
459
+ globals = config.globals;
460
+ delete config.globals;
461
+ }
462
+
463
+ if (config.overrides) {
464
+ if (file) {
465
+ _.each(config.overrides, function (options, pattern) {
466
+ if (minimatch(file, pattern, { nocase: true, matchBase: true })) {
467
+ if (options.globals) {
468
+ globals = _.extend(globals || {}, options.globals);
469
+ delete options.globals;
470
+ }
471
+ _.extend(config, options);
472
+ }
473
+ });
474
+ }
475
+
476
+ delete config.overrides;
477
+ }
478
+
479
+ delete config.dirname;
480
+
481
+ buffer.push(code);
482
+ buffer = buffer.join("\n");
483
+ buffer = buffer.replace(/^\uFEFF/, ""); // Remove potential Unicode BOM.
484
+
485
+ if (!JSHINT(buffer, config, globals)) {
486
+ JSHINT.errors.forEach(function (err) {
487
+ if (err) {
488
+ results.push({ file: file || "stdin", error: err });
489
+ }
490
+ });
491
+ }
492
+
493
+ lintData = JSHINT.data();
494
+
495
+ if (lintData) {
496
+ lintData.file = file || "stdin";
497
+ data.push(lintData);
498
+ }
499
+ }
500
+
501
+ var exports = {
502
+ extract: extract,
503
+ exit: exit,
504
+
505
+ /**
506
+ * Returns a configuration file or nothing, if it can't be found.
507
+ */
508
+ getConfig: function (fp) {
509
+ return loadNpmConfig(fp) || exports.loadConfig(findConfig(fp));
510
+ },
511
+
512
+ /**
513
+ * Loads and parses a configuration file.
514
+ *
515
+ * @param {string} fp a path to the config file
516
+ * @returns {object} config object
517
+ */
518
+ loadConfig: function (fp) {
519
+ if (!fp) {
520
+ return {};
521
+ }
522
+
523
+ if (!shjs.test("-e", fp)) {
524
+ cli.error("Can't find config file: " + fp);
525
+ exports.exit(1);
526
+ }
527
+
528
+ try {
529
+ var config = JSON.parse(stripJsonComments(shjs.cat(fp)));
530
+ config.dirname = path.dirname(fp);
531
+
532
+ if (config['extends']) {
533
+ var baseConfig = exports.loadConfig(path.resolve(config.dirname, config['extends']));
534
+ config.globals = _.extend({}, baseConfig.globals, config.globals);
535
+ _.defaults(config, baseConfig);
536
+ delete config['extends'];
537
+ }
538
+
539
+ return config;
540
+ } catch (err) {
541
+ cli.error("Can't parse config file: " + fp);
542
+ exports.exit(1);
543
+ }
544
+ },
545
+
546
+ /**
547
+ * Gathers all files that need to be linted
548
+ *
549
+ * @param {object} post-processed options from 'interpret':
550
+ * args - CLI arguments
551
+ * ignores - A list of files/dirs to ignore (defaults to .jshintignores)
552
+ * extensions - A list of non-dot-js extensions to check
553
+ */
554
+ gather: function (opts) {
555
+ var files = [];
556
+
557
+ var reg = new RegExp("\\.(js" +
558
+ (!opts.extensions ? "" : "|" +
559
+ opts.extensions.replace(/,/g, "|").replace(/[\. ]/g, "")) + ")$");
560
+
561
+ var ignores = !opts.ignores ? loadIgnores() : opts.ignores.map(function (target) {
562
+ return path.resolve(target);
563
+ });
564
+
565
+ opts.args.forEach(function (target) {
566
+ collect(target, files, ignores, reg);
567
+ });
568
+
569
+ return files;
570
+ },
571
+
572
+ /**
573
+ * Gathers all files that need to be linted, lints them, sends them to
574
+ * a reporter and returns the overall result.
575
+ *
576
+ * @param {object} post-processed options from 'interpret':
577
+ * args - CLI arguments
578
+ * config - Configuration object
579
+ * reporter - Reporter function
580
+ * ignores - A list of files/dirs to ignore
581
+ * extensions - A list of non-dot-js extensions to check
582
+ * @param {function} cb a callback to call when function is finished
583
+ * asynchronously.
584
+ *
585
+ * @returns {bool} 'true' if all files passed, 'false' otherwise and 'null'
586
+ * when function will be finished asynchronously.
587
+ */
588
+ run: function (opts, cb) {
589
+ var files = exports.gather(opts);
590
+ var results = [];
591
+ var data = [];
592
+
593
+ if (opts.useStdin) {
594
+ cli.withStdin(function (code) {
595
+ var config = opts.config;
596
+ if (opts.filename && !config) {
597
+ var filename = path.resolve(opts.filename);
598
+ config = loadNpmConfig(filename) ||
599
+ exports.loadConfig(findConfig(filename));
600
+ }
601
+
602
+ config = config || {};
603
+
604
+ lint(extract(code, opts.extract), results, config, data);
605
+ (opts.reporter || defReporter)(results, data, { verbose: opts.verbose });
606
+ cb(results.length === 0);
607
+ });
608
+
609
+ return null;
610
+ }
611
+
612
+ files.forEach(function (file) {
613
+ var config = opts.config || exports.getConfig(file);
614
+ var code;
615
+
616
+ try {
617
+ code = shjs.cat(file);
618
+ } catch (err) {
619
+ cli.error("Can't open " + file);
620
+ exports.exit(1);
621
+ }
622
+
623
+ lint(extract(code, opts.extract), results, config, data, file);
624
+
625
+ if (results.length) {
626
+ var offsets = extractOffsets(code, opts.extract);
627
+ if (offsets && offsets.length) {
628
+ results.forEach(function (errorInfo) {
629
+ var line = errorInfo.error.line;
630
+ if (line >= 0 && line < offsets.length) {
631
+ var offset = +offsets[line];
632
+ errorInfo.error.character += offset;
633
+ }
634
+ });
635
+ }
636
+ }
637
+ });
638
+
639
+ (opts.reporter || defReporter)(results, data, { verbose: opts.verbose });
640
+ return results.length === 0;
641
+ },
642
+
643
+ /**
644
+ * Helper exposed for testing.
645
+ * Used to determine is stdout has any buffered output before exiting the program
646
+ */
647
+ getBufferSize: function () {
648
+ return process.stdout.bufferSize;
649
+ },
650
+
651
+ /**
652
+ * Main entrance function. Parses arguments and calls 'run' when
653
+ * its done. This function is called from bin/jshint file.
654
+ *
655
+ * @param {object} args, arguments in the process.argv format.
656
+ */
657
+ interpret: function (args) {
658
+ cli.setArgv(args);
659
+ cli.options = {};
660
+
661
+ cli.enable("version", "glob", "help");
662
+ cli.setApp(path.resolve(__dirname + "/../package.json"));
663
+
664
+ var options = cli.parse(OPTIONS);
665
+ // Use config file if specified
666
+ var config;
667
+ if (options.config) {
668
+ config = exports.loadConfig(options.config);
669
+ }
670
+
671
+ switch (true) {
672
+ // JSLint reporter
673
+ case options.reporter === "jslint":
674
+ case options["jslint-reporter"]:
675
+ options.reporter = "./reporters/jslint_xml.js";
676
+ break;
677
+
678
+ // CheckStyle (XML) reporter
679
+ case options.reporter === "checkstyle":
680
+ case options["checkstyle-reporter"]:
681
+ options.reporter = "./reporters/checkstyle.js";
682
+ break;
683
+
684
+ // Reporter that displays additional JSHint data
685
+ case options["show-non-errors"]:
686
+ options.reporter = "./reporters/non_error.js";
687
+ break;
688
+
689
+ // Custom reporter
690
+ case options.reporter !== undefined:
691
+ options.reporter = path.resolve(process.cwd(), options.reporter);
692
+ }
693
+
694
+ var reporter;
695
+ if (options.reporter) {
696
+ reporter = loadReporter(options.reporter);
697
+
698
+ if (reporter === null) {
699
+ cli.error("Can't load reporter file: " + options.reporter);
700
+ exports.exit(1);
701
+ }
702
+ }
703
+
704
+ // This is a hack. exports.run is both sync and async function
705
+ // because I needed stdin support (and cli.withStdin is async)
706
+ // and was too lazy to change tests.
707
+
708
+ function done(passed) {
709
+ /*jshint eqnull:true */
710
+
711
+ if (passed == null)
712
+ return;
713
+
714
+ exports.exit(passed ? 0 : 2);
715
+ }
716
+
717
+ done(exports.run({
718
+ args: cli.args,
719
+ config: config,
720
+ reporter: reporter,
721
+ ignores: loadIgnores(options.exclude, options["exclude-path"]),
722
+ extensions: options["extra-ext"],
723
+ verbose: options.verbose,
724
+ extract: options.extract,
725
+ filename: options.filename,
726
+ useStdin: {"-": true, "/dev/stdin": true}[args[args.length - 1]]
727
+ }, done));
728
+ }
729
+ };
730
+
731
+ module.exports = exports;