libv8 6.7.288.46.1 → 7.3.492.27.0beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (408) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.md +4 -0
  4. data/README.md +2 -0
  5. data/ext/libv8/builder.rb +6 -2
  6. data/lib/libv8/version.rb +1 -1
  7. data/vendor/depot_tools/.gitattributes +1 -0
  8. data/vendor/depot_tools/.gitignore +7 -0
  9. data/vendor/depot_tools/CROS_OWNERS +5 -0
  10. data/vendor/depot_tools/OWNERS +12 -1
  11. data/vendor/depot_tools/PRESUBMIT.py +16 -9
  12. data/vendor/depot_tools/README.md +9 -2
  13. data/vendor/depot_tools/autoninja +14 -6
  14. data/vendor/depot_tools/autoninja.bat +11 -1
  15. data/vendor/depot_tools/autoninja.py +40 -18
  16. data/vendor/depot_tools/bb +12 -0
  17. data/vendor/depot_tools/bb.bat +7 -0
  18. data/vendor/depot_tools/bootstrap/win/manifest.txt +1 -1
  19. data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +1 -1
  20. data/vendor/depot_tools/bootstrap/win/win_tools.py +2 -1
  21. data/vendor/depot_tools/buildbucket.py +57 -4
  22. data/vendor/depot_tools/cipd +157 -44
  23. data/vendor/depot_tools/cipd.bat +51 -14
  24. data/vendor/depot_tools/cipd.ps1 +104 -42
  25. data/vendor/depot_tools/cipd_client_version +1 -1
  26. data/vendor/depot_tools/cipd_client_version.digests +21 -0
  27. data/vendor/depot_tools/cipd_manifest.txt +19 -6
  28. data/vendor/depot_tools/cipd_manifest.versions +318 -0
  29. data/vendor/depot_tools/clang_format.py +4 -4
  30. data/vendor/depot_tools/cpplint.py +44 -199
  31. data/vendor/depot_tools/dart_format.py +2 -2
  32. data/vendor/depot_tools/detect_host_arch.py +8 -3
  33. data/vendor/depot_tools/download_from_google_storage.py +47 -39
  34. data/vendor/depot_tools/fetch.py +30 -18
  35. data/vendor/depot_tools/fetch_configs/android_internal.py +34 -0
  36. data/vendor/depot_tools/fetch_configs/chromium.py +18 -1
  37. data/vendor/depot_tools/fetch_configs/config_util.py +4 -2
  38. data/vendor/depot_tools/fetch_configs/inspector_protocol.py +40 -0
  39. data/vendor/depot_tools/fetch_configs/node-ci.py +41 -0
  40. data/vendor/depot_tools/fix_encoding.py +3 -3
  41. data/vendor/depot_tools/gclient +1 -1
  42. data/vendor/depot_tools/gclient.py +415 -198
  43. data/vendor/depot_tools/gclient_eval.py +220 -171
  44. data/vendor/depot_tools/gclient_paths.py +142 -0
  45. data/vendor/depot_tools/gclient_scm.py +200 -51
  46. data/vendor/depot_tools/gclient_utils.py +88 -191
  47. data/vendor/depot_tools/gerrit_client.py +13 -0
  48. data/vendor/depot_tools/gerrit_util.py +158 -23
  49. data/vendor/depot_tools/git-nav-upstream +1 -1
  50. data/vendor/depot_tools/git_cache.py +77 -24
  51. data/vendor/depot_tools/git_cl.py +705 -1099
  52. data/vendor/depot_tools/git_common.py +9 -6
  53. data/vendor/depot_tools/git_map_branches.py +19 -2
  54. data/vendor/depot_tools/git_nav_downstream.py +3 -4
  55. data/vendor/depot_tools/git_rebase_update.py +14 -0
  56. data/vendor/depot_tools/git_reparent_branch.py +8 -2
  57. data/vendor/depot_tools/gn.py +38 -3
  58. data/vendor/depot_tools/gsutil.py +8 -3
  59. data/vendor/depot_tools/gsutil.py.bat +15 -0
  60. data/vendor/depot_tools/gsutil.vpython +16 -0
  61. data/vendor/depot_tools/infra/config/OWNERS +0 -1
  62. data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
  63. data/vendor/depot_tools/lucicfg +12 -0
  64. data/vendor/depot_tools/lucicfg.bat +7 -0
  65. data/vendor/depot_tools/man/html/git-map-branches.html +34 -2
  66. data/vendor/depot_tools/man/html/git-new-branch.html +40 -32
  67. data/vendor/depot_tools/man/man1/git-map-branches.1 +24 -5
  68. data/vendor/depot_tools/man/man1/git-new-branch.1 +35 -27
  69. data/vendor/depot_tools/man/src/git-map-branches.demo.1.sh +1 -0
  70. data/vendor/depot_tools/man/src/git-map-branches.txt +10 -0
  71. data/vendor/depot_tools/man/src/git-new-branch.demo.1.sh +9 -4
  72. data/vendor/depot_tools/man/src/git-new-branch.txt +1 -1
  73. data/vendor/depot_tools/metrics.README.md +98 -0
  74. data/vendor/depot_tools/metrics.py +296 -0
  75. data/vendor/depot_tools/metrics_utils.py +303 -0
  76. data/vendor/depot_tools/my_activity.py +91 -29
  77. data/vendor/depot_tools/ninja +1 -1
  78. data/vendor/depot_tools/ninjalog.README.md +64 -0
  79. data/vendor/depot_tools/ninjalog_uploader.py +232 -0
  80. data/vendor/depot_tools/ninjalog_uploader_wrapper.py +116 -0
  81. data/vendor/depot_tools/owners.py +30 -13
  82. data/vendor/depot_tools/owners_finder.py +5 -2
  83. data/vendor/depot_tools/presubmit_canned_checks.py +188 -29
  84. data/vendor/depot_tools/presubmit_support.py +18 -41
  85. data/vendor/depot_tools/pylintrc +23 -19
  86. data/vendor/depot_tools/recipes/OWNERS +2 -0
  87. data/vendor/depot_tools/recipes/README.recipes.md +344 -151
  88. data/vendor/depot_tools/recipes/recipe_modules/bot_update/OWNERS +2 -0
  89. data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +2 -16
  90. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +141 -99
  91. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +5 -8
  92. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +5 -8
  93. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +6 -98
  94. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +4 -9
  95. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +45 -5
  96. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +4 -9
  97. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +4 -9
  98. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob.json → input_commit_with_id_without_repo.json} +6 -11
  99. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob_empty_revision.json → multiple_patch_refs.json} +8 -9
  100. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +19 -29
  101. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{trychange.json → refs.json} +4 -9
  102. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +4 -9
  103. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +51 -6
  104. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +50 -6
  105. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +51 -6
  106. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +17 -25
  107. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +17 -25
  108. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +18 -26
  109. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +18 -26
  110. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +26 -28
  111. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +45 -5
  112. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +17 -25
  113. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +13 -0
  114. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name.json +13 -152
  115. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +4 -9
  116. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +185 -202
  117. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +52 -157
  118. data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +5 -14
  119. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +34 -0
  120. data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +14 -2
  121. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +4 -5
  122. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +4 -5
  123. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +7 -5
  124. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +4 -5
  125. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +4 -5
  126. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +9 -3
  127. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +9 -3
  128. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +9 -3
  129. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +4 -5
  130. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +2 -3
  131. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +2 -3
  132. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +2 -3
  133. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +2 -3
  134. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +2 -3
  135. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +2 -3
  136. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +2 -3
  137. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +2 -3
  138. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +2 -3
  139. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +2 -3
  140. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +13 -8
  141. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +18 -12
  142. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +18 -12
  143. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +18 -12
  144. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.py +3 -0
  145. data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +1 -0
  146. data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +58 -46
  147. data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +65 -22
  148. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +20 -21
  149. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +20 -21
  150. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +20 -21
  151. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +20 -21
  152. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +5 -2
  153. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +62 -14
  154. data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +24 -38
  155. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +56 -50
  156. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.py +15 -9
  157. data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +4 -1
  158. data/vendor/depot_tools/recipes/recipe_modules/git/api.py +34 -22
  159. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +5 -6
  160. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +5 -6
  161. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +5 -6
  162. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +5 -6
  163. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +222 -0
  164. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +5 -6
  165. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +5 -6
  166. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +224 -0
  167. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +10 -6
  168. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +5 -7
  169. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +5 -6
  170. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +5 -6
  171. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +5 -7
  172. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +5 -6
  173. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +10 -5
  174. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +5 -6
  175. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +8 -9
  176. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +5 -6
  177. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +12 -8
  178. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +5 -6
  179. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +5 -6
  180. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +27 -11
  181. data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +1 -1
  182. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +12 -13
  183. data/vendor/depot_tools/recipes/recipe_modules/gitiles/__init__.py +5 -0
  184. data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +120 -5
  185. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +45 -3
  186. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.py +25 -0
  187. data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +56 -4
  188. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +6 -0
  189. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.py +49 -0
  190. data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +24 -13
  191. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +13 -14
  192. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +2 -3
  193. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +2 -3
  194. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +2 -3
  195. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +2 -3
  196. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +2 -3
  197. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +2 -3
  198. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +2 -3
  199. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +2 -3
  200. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +2 -3
  201. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +2 -3
  202. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +1 -2
  203. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +35 -0
  204. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +116 -0
  205. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +22 -0
  206. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +82 -0
  207. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +22 -0
  208. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +23 -0
  209. data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +1 -0
  210. data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +2 -7
  211. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +7 -6
  212. data/vendor/depot_tools/recipes/recipe_modules/tryserver/__init__.py +1 -0
  213. data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +117 -8
  214. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +4 -5
  215. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +7 -4
  216. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +98 -7
  217. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +147 -0
  218. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +8 -5
  219. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +8 -5
  220. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +9 -6
  221. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +9 -6
  222. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +27 -2
  223. data/vendor/depot_tools/recipes/recipe_modules/tryserver/test_api.py +14 -0
  224. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/__init__.py +25 -0
  225. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/api.py +137 -0
  226. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +22 -0
  227. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +22 -0
  228. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +107 -0
  229. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +26 -0
  230. data/vendor/depot_tools/recipes/recipes.py +37 -27
  231. data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +7 -10
  232. data/vendor/depot_tools/repo +34 -8
  233. data/vendor/depot_tools/roll_dep.py +52 -49
  234. data/vendor/depot_tools/scm.py +38 -23
  235. data/vendor/depot_tools/setup_color.py +4 -2
  236. data/vendor/depot_tools/split_cl.py +32 -4
  237. data/vendor/depot_tools/subprocess2.py +22 -4
  238. data/vendor/depot_tools/third_party/httplib2/README.chromium +2 -2
  239. data/vendor/depot_tools/third_party/httplib2/__init__.py +242 -158
  240. data/vendor/depot_tools/third_party/httplib2/cacerts.txt +57 -44
  241. data/vendor/depot_tools/third_party/httplib2/socks.py +15 -5
  242. data/vendor/depot_tools/third_party/logilab/README.chromium +2 -4
  243. data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +2 -1
  244. data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +10 -5
  245. data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +5 -5
  246. data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +233 -0
  247. data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +82 -33
  248. data/vendor/depot_tools/third_party/logilab/astroid/bases.py +137 -153
  249. data/vendor/depot_tools/third_party/logilab/astroid/brain/{builtin_inference.py → brain_builtin_inference.py} +117 -26
  250. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +15 -0
  251. data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2gi.py → brain_gi.py} +48 -8
  252. data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2mechanize.py → brain_mechanize.py} +0 -0
  253. data/vendor/depot_tools/third_party/logilab/astroid/brain/{pynose.py → brain_nose.py} +4 -1
  254. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +62 -0
  255. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +76 -0
  256. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +44 -0
  257. data/vendor/depot_tools/third_party/logilab/astroid/brain/{pysix_moves.py → brain_six.py} +28 -1
  258. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +65 -0
  259. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +473 -0
  260. data/vendor/depot_tools/third_party/logilab/astroid/builder.py +104 -81
  261. data/vendor/depot_tools/third_party/logilab/astroid/context.py +81 -0
  262. data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +75 -0
  263. data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +20 -0
  264. data/vendor/depot_tools/third_party/logilab/astroid/inference.py +137 -183
  265. data/vendor/depot_tools/third_party/logilab/astroid/manager.py +45 -169
  266. data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +37 -14
  267. data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +112 -41
  268. data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +243 -156
  269. data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +35 -22
  270. data/vendor/depot_tools/third_party/logilab/astroid/objects.py +186 -0
  271. data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +157 -102
  272. data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +32 -8
  273. data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +372 -309
  274. data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +652 -420
  275. data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +4 -21
  276. data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +96 -0
  277. data/vendor/depot_tools/third_party/logilab/astroid/util.py +89 -0
  278. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +19 -0
  279. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +11 -0
  280. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +20 -0
  281. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +1421 -0
  282. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +9 -0
  283. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +246 -0
  284. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +414 -0
  285. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +13 -0
  286. data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +24 -0
  287. data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +11 -0
  288. data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +19 -0
  289. data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +2729 -0
  290. data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +96 -0
  291. data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +512 -0
  292. data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +228 -0
  293. data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +901 -0
  294. data/vendor/depot_tools/third_party/pylint/README.chromium +2 -25
  295. data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +13 -3
  296. data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +1 -2
  297. data/vendor/depot_tools/third_party/pylint/checkers/async.py +82 -0
  298. data/vendor/depot_tools/third_party/pylint/checkers/base.py +893 -119
  299. data/vendor/depot_tools/third_party/pylint/checkers/classes.py +342 -204
  300. data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +51 -34
  301. data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +84 -47
  302. data/vendor/depot_tools/third_party/pylint/checkers/format.py +55 -30
  303. data/vendor/depot_tools/third_party/pylint/checkers/imports.py +314 -73
  304. data/vendor/depot_tools/third_party/pylint/checkers/logging.py +10 -8
  305. data/vendor/depot_tools/third_party/pylint/checkers/misc.py +2 -1
  306. data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +45 -48
  307. data/vendor/depot_tools/third_party/pylint/checkers/python3.py +31 -21
  308. data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +3 -3
  309. data/vendor/depot_tools/third_party/pylint/checkers/similar.py +4 -5
  310. data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +24 -10
  311. data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +120 -56
  312. data/vendor/depot_tools/third_party/pylint/checkers/strings.py +38 -35
  313. data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +485 -138
  314. data/vendor/depot_tools/third_party/pylint/checkers/utils.py +319 -142
  315. data/vendor/depot_tools/third_party/pylint/checkers/variables.py +329 -207
  316. data/vendor/depot_tools/third_party/pylint/config.py +739 -76
  317. data/vendor/depot_tools/third_party/pylint/epylint.py +9 -5
  318. data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
  319. data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +311 -0
  320. data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +62 -0
  321. data/vendor/depot_tools/third_party/{logilab/common → pylint}/graph.py +30 -133
  322. data/vendor/depot_tools/third_party/pylint/gui.py +2 -2
  323. data/vendor/depot_tools/third_party/pylint/interfaces.py +21 -3
  324. data/vendor/depot_tools/third_party/pylint/lint.py +123 -140
  325. data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +10 -13
  326. data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +15 -4
  327. data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +372 -0
  328. data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +30 -7
  329. data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +80 -2
  330. data/vendor/depot_tools/third_party/{logilab/common → pylint/pyreverse}/vcgutils.py +19 -37
  331. data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +3 -4
  332. data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +34 -18
  333. data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +1 -1
  334. data/vendor/depot_tools/third_party/pylint/reporters/html.py +10 -3
  335. data/vendor/depot_tools/third_party/pylint/reporters/json.py +10 -4
  336. data/vendor/depot_tools/third_party/pylint/reporters/text.py +94 -3
  337. data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +106 -0
  338. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/html_writer.py +17 -57
  339. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/nodes.py +52 -74
  340. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/text_writer.py +14 -60
  341. data/vendor/depot_tools/third_party/pylint/testutils.py +22 -20
  342. data/vendor/depot_tools/third_party/pylint/utils.py +268 -44
  343. data/vendor/depot_tools/third_party/repo/progress.py +42 -0
  344. data/vendor/depot_tools/update_depot_tools +1 -1
  345. data/vendor/depot_tools/upload_metrics.py +25 -0
  346. data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +45 -15
  347. data/vendor/depot_tools/win_toolchain/package_from_installed.py +71 -24
  348. data/vendor/depot_tools/yapf +1 -1
  349. data/vendor/depot_tools/yapf.bat +1 -1
  350. metadata +92 -77
  351. data/vendor/depot_tools/git-crsync +0 -3
  352. data/vendor/depot_tools/infra/config/cq.cfg +0 -32
  353. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref.json +0 -29
  354. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref_custom.json +0 -29
  355. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/buildbot.json +0 -105
  356. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/shallow.json +0 -195
  357. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle_deprecated.json +0 -248
  358. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8.json +0 -248
  359. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name_no_patch.json +0 -105
  360. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/apply_gerrit.py +0 -33
  361. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2pytest.py +0 -31
  362. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2qt4.py +0 -22
  363. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2stdlib.py +0 -334
  364. data/vendor/depot_tools/third_party/logilab/astroid/inspector.py +0 -273
  365. data/vendor/depot_tools/third_party/logilab/astroid/utils.py +0 -239
  366. data/vendor/depot_tools/third_party/logilab/common/LICENSE.txt +0 -339
  367. data/vendor/depot_tools/third_party/logilab/common/README.chromium +0 -11
  368. data/vendor/depot_tools/third_party/logilab/common/__init__.py +0 -175
  369. data/vendor/depot_tools/third_party/logilab/common/__pkginfo__.py +0 -57
  370. data/vendor/depot_tools/third_party/logilab/common/cache.py +0 -114
  371. data/vendor/depot_tools/third_party/logilab/common/changelog.py +0 -238
  372. data/vendor/depot_tools/third_party/logilab/common/clcommands.py +0 -334
  373. data/vendor/depot_tools/third_party/logilab/common/cli.py +0 -211
  374. data/vendor/depot_tools/third_party/logilab/common/compat.py +0 -78
  375. data/vendor/depot_tools/third_party/logilab/common/configuration.py +0 -1105
  376. data/vendor/depot_tools/third_party/logilab/common/contexts.py +0 -5
  377. data/vendor/depot_tools/third_party/logilab/common/corbautils.py +0 -117
  378. data/vendor/depot_tools/third_party/logilab/common/daemon.py +0 -101
  379. data/vendor/depot_tools/third_party/logilab/common/date.py +0 -335
  380. data/vendor/depot_tools/third_party/logilab/common/dbf.py +0 -231
  381. data/vendor/depot_tools/third_party/logilab/common/debugger.py +0 -214
  382. data/vendor/depot_tools/third_party/logilab/common/decorators.py +0 -281
  383. data/vendor/depot_tools/third_party/logilab/common/deprecation.py +0 -189
  384. data/vendor/depot_tools/third_party/logilab/common/fileutils.py +0 -404
  385. data/vendor/depot_tools/third_party/logilab/common/interface.py +0 -71
  386. data/vendor/depot_tools/third_party/logilab/common/logging_ext.py +0 -195
  387. data/vendor/depot_tools/third_party/logilab/common/modutils.py +0 -702
  388. data/vendor/depot_tools/third_party/logilab/common/optik_ext.py +0 -392
  389. data/vendor/depot_tools/third_party/logilab/common/optparser.py +0 -92
  390. data/vendor/depot_tools/third_party/logilab/common/proc.py +0 -277
  391. data/vendor/depot_tools/third_party/logilab/common/pyro_ext.py +0 -180
  392. data/vendor/depot_tools/third_party/logilab/common/pytest.py +0 -1199
  393. data/vendor/depot_tools/third_party/logilab/common/registry.py +0 -1119
  394. data/vendor/depot_tools/third_party/logilab/common/shellutils.py +0 -462
  395. data/vendor/depot_tools/third_party/logilab/common/sphinx_ext.py +0 -87
  396. data/vendor/depot_tools/third_party/logilab/common/sphinxutils.py +0 -122
  397. data/vendor/depot_tools/third_party/logilab/common/table.py +0 -929
  398. data/vendor/depot_tools/third_party/logilab/common/tasksqueue.py +0 -101
  399. data/vendor/depot_tools/third_party/logilab/common/testlib.py +0 -1392
  400. data/vendor/depot_tools/third_party/logilab/common/textutils.py +0 -537
  401. data/vendor/depot_tools/third_party/logilab/common/tree.py +0 -369
  402. data/vendor/depot_tools/third_party/logilab/common/umessage.py +0 -194
  403. data/vendor/depot_tools/third_party/logilab/common/ureports/__init__.py +0 -172
  404. data/vendor/depot_tools/third_party/logilab/common/ureports/docbook_writer.py +0 -140
  405. data/vendor/depot_tools/third_party/logilab/common/urllib2ext.py +0 -89
  406. data/vendor/depot_tools/third_party/logilab/common/visitor.py +0 -109
  407. data/vendor/depot_tools/third_party/logilab/common/xmlrpcutils.py +0 -131
  408. data/vendor/depot_tools/third_party/logilab/common/xmlutils.py +0 -61
@@ -18,7 +18,7 @@
18
18
  import re
19
19
  from collections import defaultdict
20
20
 
21
- from astroid import If, InferenceError
21
+ from astroid import If, BoolOp
22
22
 
23
23
  from pylint.interfaces import IAstroidChecker
24
24
  from pylint.checkers import BaseChecker
@@ -64,12 +64,27 @@ MSGS = {
64
64
  'too-many-statements',
65
65
  'Used when a function or method has too many statements. You \
66
66
  should then split it in smaller functions / methods.'),
67
- 'R0923': ('Interface not implemented',
68
- 'interface-not-implemented',
69
- 'Used when an interface class is not implemented anywhere.'),
67
+ 'R0916': ('Too many boolean expressions in if statement (%s/%s)',
68
+ 'too-many-boolean-expressions',
69
+ 'Used when a if statement contains too many boolean '
70
+ 'expressions'),
70
71
  }
71
72
 
72
73
 
74
+ def _count_boolean_expressions(bool_op):
75
+ """Counts the number of boolean expressions in BoolOp `bool_op` (recursive)
76
+
77
+ example: a and (b or c or (d and e)) ==> 5 boolean expressions
78
+ """
79
+ nb_bool_expr = 0
80
+ for bool_expr in bool_op.get_children():
81
+ if isinstance(bool_expr, BoolOp):
82
+ nb_bool_expr += _count_boolean_expressions(bool_expr)
83
+ else:
84
+ nb_bool_expr += 1
85
+ return nb_bool_expr
86
+
87
+
73
88
  class MisdesignChecker(BaseChecker):
74
89
  """checks for sign of poor/misdesign:
75
90
  * number of methods, attributes, local variables...
@@ -139,6 +154,13 @@ class MisdesignChecker(BaseChecker):
139
154
  'help' : 'Maximum number of public methods for a class \
140
155
  (see R0904).'}
141
156
  ),
157
+ ('max-bool-expr',
158
+ {'default': 5,
159
+ 'type': 'int',
160
+ 'metavar': '<num>',
161
+ 'help': 'Maximum number of boolean expressions in a if '
162
+ 'statement'}
163
+ ),
142
164
  )
143
165
 
144
166
  def __init__(self, linter=None):
@@ -146,8 +168,6 @@ class MisdesignChecker(BaseChecker):
146
168
  self.stats = None
147
169
  self._returns = None
148
170
  self._branches = None
149
- self._used_ifaces = None
150
- self._ifaces = None
151
171
  self._stmts = 0
152
172
 
153
173
  def open(self):
@@ -155,19 +175,10 @@ class MisdesignChecker(BaseChecker):
155
175
  self.stats = self.linter.add_stats()
156
176
  self._returns = []
157
177
  self._branches = defaultdict(int)
158
- self._used_ifaces = {}
159
- self._ifaces = []
160
-
161
- def close(self):
162
- """check that interface classes are used"""
163
- for iface in self._ifaces:
164
- if not iface in self._used_ifaces:
165
- self.add_message('interface-not-implemented', node=iface)
166
178
 
167
179
  @check_messages('too-many-ancestors', 'too-many-instance-attributes',
168
- 'too-few-public-methods', 'too-many-public-methods',
169
- 'interface-not-implemented')
170
- def visit_class(self, node):
180
+ 'too-few-public-methods', 'too-many-public-methods')
181
+ def visit_classdef(self, node):
171
182
  """check size of inheritance hierarchy and number of instance attributes
172
183
  """
173
184
  # Is the total inheritance hierarchy is 7 or less?
@@ -182,22 +193,9 @@ class MisdesignChecker(BaseChecker):
182
193
  self.add_message('too-many-instance-attributes', node=node,
183
194
  args=(len(node.instance_attrs),
184
195
  self.config.max_attributes))
185
- # update interface classes structures
186
- if node.type == 'interface' and node.name != 'Interface':
187
- self._ifaces.append(node)
188
- for parent in node.ancestors(False):
189
- if parent.name == 'Interface':
190
- continue
191
- self._used_ifaces[parent] = 1
192
- try:
193
- for iface in node.interfaces():
194
- self._used_ifaces[iface] = 1
195
- except InferenceError:
196
- # XXX log ?
197
- pass
198
196
 
199
197
  @check_messages('too-few-public-methods', 'too-many-public-methods')
200
- def leave_class(self, node):
198
+ def leave_classdef(self, node):
201
199
  """check number of public methods"""
202
200
  my_methods = sum(1 for method in node.mymethods()
203
201
  if not method.name.startswith('_'))
@@ -230,7 +228,7 @@ class MisdesignChecker(BaseChecker):
230
228
  @check_messages('too-many-return-statements', 'too-many-branches',
231
229
  'too-many-arguments', 'too-many-locals',
232
230
  'too-many-statements')
233
- def visit_function(self, node):
231
+ def visit_functiondef(self, node):
234
232
  """check function name, docstring, arguments, redefinition,
235
233
  variable names, max locals
236
234
  """
@@ -256,10 +254,12 @@ class MisdesignChecker(BaseChecker):
256
254
  # init statements counter
257
255
  self._stmts = 1
258
256
 
257
+ visit_asyncfunctiondef = visit_functiondef
258
+
259
259
  @check_messages('too-many-return-statements', 'too-many-branches',
260
260
  'too-many-arguments', 'too-many-locals',
261
261
  'too-many-statements')
262
- def leave_function(self, node):
262
+ def leave_functiondef(self, node):
263
263
  """most of the work is done here on close:
264
264
  checks for max returns, branch, return in __init__
265
265
  """
@@ -276,6 +276,8 @@ class MisdesignChecker(BaseChecker):
276
276
  self.add_message('too-many-statements', node=node,
277
277
  args=(self._stmts, self.config.max_statements))
278
278
 
279
+ leave_asyncfunctiondef = leave_functiondef
280
+
279
281
  def visit_return(self, _):
280
282
  """count number of returns"""
281
283
  if not self._returns:
@@ -302,8 +304,10 @@ class MisdesignChecker(BaseChecker):
302
304
  self._inc_branch(node, 2)
303
305
  self._stmts += 2
304
306
 
307
+ @check_messages('too-many-boolean-expressions')
305
308
  def visit_if(self, node):
306
- """increments the branches counter"""
309
+ """increments the branches counter and checks boolean expressions"""
310
+ self._check_boolean_expressions(node)
307
311
  branches = 1
308
312
  # don't double count If nodes coming from some 'elif'
309
313
  if node.orelse and (len(node.orelse) > 1 or
@@ -312,6 +316,19 @@ class MisdesignChecker(BaseChecker):
312
316
  self._inc_branch(node, branches)
313
317
  self._stmts += branches
314
318
 
319
+ def _check_boolean_expressions(self, node):
320
+ """Go through "if" node `node` and counts its boolean expressions
321
+
322
+ if the "if" node test is a BoolOp node
323
+ """
324
+ condition = node.test
325
+ if not isinstance(condition, BoolOp):
326
+ return
327
+ nb_bool_expr = _count_boolean_expressions(condition)
328
+ if nb_bool_expr > self.config.max_bool_expr:
329
+ self.add_message('too-many-boolean-expressions', node=condition,
330
+ args=(nb_bool_expr, self.config.max_bool_expr))
331
+
315
332
  def visit_while(self, node):
316
333
  """increments the branches counter"""
317
334
  branches = 1
@@ -14,22 +14,30 @@
14
14
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
15
  """exceptions handling (raising, catching, exceptions classes) checker
16
16
  """
17
+ import inspect
17
18
  import sys
18
19
 
19
- import astroid
20
- from astroid import YES, Instance, unpack_infer, List, Tuple
21
- from logilab.common.compat import builtins
20
+ import six
21
+ from six.moves import builtins
22
22
 
23
+ import astroid
23
24
  from pylint.checkers import BaseChecker
24
25
  from pylint.checkers.utils import (
25
- is_empty,
26
26
  is_raising,
27
27
  check_messages,
28
28
  inherit_from_std_ex,
29
29
  EXCEPTIONS_MODULE,
30
- has_known_bases,
31
- safe_infer)
32
- from pylint.interfaces import IAstroidChecker, INFERENCE, INFERENCE_FAILURE
30
+ safe_infer,
31
+ has_known_bases)
32
+ from pylint.interfaces import IAstroidChecker
33
+
34
+
35
+ def _builtin_exceptions():
36
+ def predicate(obj):
37
+ return isinstance(obj, type) and issubclass(obj, BaseException)
38
+
39
+ members = inspect.getmembers(six.moves.builtins, predicate)
40
+ return {exc.__name__ for (_, exc) in members}
33
41
 
34
42
 
35
43
  def _annotated_unpack_infer(stmt, context=None):
@@ -39,14 +47,14 @@ def _annotated_unpack_infer(stmt, context=None):
39
47
  Returns an iterator which yields tuples in the format
40
48
  ('original node', 'infered node').
41
49
  """
42
- if isinstance(stmt, (List, Tuple)):
50
+ if isinstance(stmt, (astroid.List, astroid.Tuple)):
43
51
  for elt in stmt.elts:
44
52
  inferred = safe_infer(elt)
45
- if inferred and inferred is not YES:
53
+ if inferred and inferred is not astroid.YES:
46
54
  yield elt, inferred
47
55
  return
48
56
  for infered in stmt.infer(context):
49
- if infered is YES:
57
+ if infered is astroid.YES:
50
58
  continue
51
59
  yield stmt, infered
52
60
 
@@ -54,6 +62,7 @@ def _annotated_unpack_infer(stmt, context=None):
54
62
  PY3K = sys.version_info >= (3, 0)
55
63
  OVERGENERAL_EXCEPTIONS = ('Exception',)
56
64
  BUILTINS_NAME = builtins.__name__
65
+
57
66
  MSGS = {
58
67
  'E0701': ('Bad except clauses order (%s)',
59
68
  'bad-except-order',
@@ -71,6 +80,14 @@ MSGS = {
71
80
  'where the exception context is not an exception, '
72
81
  'nor None.',
73
82
  {'minversion': (3, 0)}),
83
+ 'E0704': ('The raise statement is not inside an except clause',
84
+ 'misplaced-bare-raise',
85
+ 'Used when a bare raise is not used inside an except clause. '
86
+ 'This generates an error, since there are no active exceptions '
87
+ 'to be reraised. An exception to this rule is represented by '
88
+ 'a bare raise inside a finally clause, which might work, as long '
89
+ 'as an exception is raised inside the try block, but it is '
90
+ 'nevertheless a code smell that must not be relied upon.'),
74
91
  'E0710': ('Raising a new style class which doesn\'t inherit from BaseException',
75
92
  'raising-non-exception',
76
93
  'Used when a new style class which doesn\'t inherit from \
@@ -91,10 +108,10 @@ MSGS = {
91
108
  'broad-except',
92
109
  'Used when an except catches a too general exception, \
93
110
  possibly burying unrelated errors.'),
94
- 'W0704': ('Except doesn\'t do anything',
95
- 'pointless-except',
96
- 'Used when an except clause does nothing but "pass" and there is\
97
- no "else" clause.'),
111
+ 'W0705': ('Catching previously caught exception type %s',
112
+ 'duplicate-except',
113
+ 'Used when an except catches a type that was already caught by '
114
+ 'a previous handler.'),
98
115
  'W0710': ('Exception doesn\'t inherit from standard "Exception" class',
99
116
  'nonstandard-exception',
100
117
  'Used when a custom exception class is raised but doesn\'t \
@@ -128,13 +145,17 @@ class ExceptionsChecker(BaseChecker):
128
145
  ),
129
146
  )
130
147
 
131
- @check_messages('nonstandard-exception',
148
+ def open(self):
149
+ self.builtin_exceptions = _builtin_exceptions()
150
+ super(ExceptionsChecker, self).open()
151
+
152
+ @check_messages('nonstandard-exception', 'misplaced-bare-raise',
132
153
  'raising-bad-type', 'raising-non-exception',
133
154
  'notimplemented-raised', 'bad-exception-context')
134
155
  def visit_raise(self, node):
135
156
  """visit raise possibly inferring value"""
136
- # ignore empty raise
137
157
  if node.exc is None:
158
+ self._check_misplaced_bare_raise(node)
138
159
  return
139
160
  if PY3K and node.cause:
140
161
  self._check_bad_exception_context(node)
@@ -144,24 +165,44 @@ class ExceptionsChecker(BaseChecker):
144
165
  return
145
166
  else:
146
167
  try:
147
- value = next(unpack_infer(expr))
168
+ value = next(astroid.unpack_infer(expr))
148
169
  except astroid.InferenceError:
149
170
  return
150
171
  self._check_raise_value(node, value)
151
172
 
173
+ def _check_misplaced_bare_raise(self, node):
174
+ # Filter out if it's present in __exit__.
175
+ scope = node.scope()
176
+ if (isinstance(scope, astroid.FunctionDef)
177
+ and scope.is_method()
178
+ and scope.name == '__exit__'):
179
+ return
180
+
181
+ current = node
182
+ # Stop when a new scope is generated or when the raise
183
+ # statement is found inside a TryFinally.
184
+ ignores = (astroid.ExceptHandler, astroid.FunctionDef, astroid.TryFinally)
185
+ while current and not isinstance(current.parent, ignores):
186
+ current = current.parent
187
+
188
+ expected = (astroid.ExceptHandler,)
189
+ if (not current
190
+ or not isinstance(current.parent, expected)):
191
+ self.add_message('misplaced-bare-raise', node=node)
192
+
152
193
  def _check_bad_exception_context(self, node):
153
194
  """Verify that the exception context is properly set.
154
195
 
155
196
  An exception context can be only `None` or an exception.
156
197
  """
157
198
  cause = safe_infer(node.cause)
158
- if cause in (YES, None):
199
+ if cause in (astroid.YES, None):
159
200
  return
160
201
  if isinstance(cause, astroid.Const):
161
202
  if cause.value is not None:
162
203
  self.add_message('bad-exception-context',
163
204
  node=node)
164
- elif (not isinstance(cause, astroid.Class) and
205
+ elif (not isinstance(cause, astroid.ClassDef) and
165
206
  not inherit_from_std_ex(cause)):
166
207
  self.add_message('bad-exception-context',
167
208
  node=node)
@@ -179,9 +220,9 @@ class ExceptionsChecker(BaseChecker):
179
220
  elif ((isinstance(expr, astroid.Name) and
180
221
  expr.name in ('None', 'True', 'False')) or
181
222
  isinstance(expr, (astroid.List, astroid.Dict, astroid.Tuple,
182
- astroid.Module, astroid.Function))):
223
+ astroid.Module, astroid.FunctionDef))):
183
224
  emit = True
184
- if not PY3K and isinstance(expr, astroid.Tuple):
225
+ if not PY3K and isinstance(expr, astroid.Tuple) and expr.elts:
185
226
  # On Python 2, using the following is not an error:
186
227
  # raise (ZeroDivisionError, None)
187
228
  # raise (ZeroDivisionError, )
@@ -191,11 +232,11 @@ class ExceptionsChecker(BaseChecker):
191
232
  # the scope of this check.
192
233
  first = expr.elts[0]
193
234
  inferred = safe_infer(first)
194
- if isinstance(inferred, Instance):
235
+ if isinstance(inferred, astroid.Instance):
195
236
  # pylint: disable=protected-access
196
237
  inferred = inferred._proxied
197
- if (inferred is YES or
198
- isinstance(inferred, astroid.Class)
238
+ if (inferred is astroid.YES or
239
+ isinstance(inferred, astroid.ClassDef)
199
240
  and inherit_from_std_ex(inferred)):
200
241
  emit = False
201
242
  if emit:
@@ -203,26 +244,21 @@ class ExceptionsChecker(BaseChecker):
203
244
  node=node,
204
245
  args=expr.name)
205
246
  elif ((isinstance(expr, astroid.Name) and expr.name == 'NotImplemented')
206
- or (isinstance(expr, astroid.CallFunc) and
247
+ or (isinstance(expr, astroid.Call) and
207
248
  isinstance(expr.func, astroid.Name) and
208
249
  expr.func.name == 'NotImplemented')):
209
250
  self.add_message('notimplemented-raised', node=node)
210
- elif isinstance(expr, (Instance, astroid.Class)):
211
- if isinstance(expr, Instance):
251
+ elif isinstance(expr, (astroid.Instance, astroid.ClassDef)):
252
+ if isinstance(expr, astroid.Instance):
212
253
  # pylint: disable=protected-access
213
254
  expr = expr._proxied
214
- if (isinstance(expr, astroid.Class) and
215
- not inherit_from_std_ex(expr)):
255
+ if (isinstance(expr, astroid.ClassDef) and
256
+ not inherit_from_std_ex(expr) and
257
+ has_known_bases(expr)):
216
258
  if expr.newstyle:
217
259
  self.add_message('raising-non-exception', node=node)
218
260
  else:
219
- if has_known_bases(expr):
220
- confidence = INFERENCE
221
- else:
222
- confidence = INFERENCE_FAILURE
223
- self.add_message(
224
- 'nonstandard-exception', node=node,
225
- confidence=confidence)
261
+ self.add_message('nonstandard-exception', node=node)
226
262
  else:
227
263
  value_found = False
228
264
  else:
@@ -240,7 +276,7 @@ class ExceptionsChecker(BaseChecker):
240
276
  for node in inferred):
241
277
  return
242
278
 
243
- if not isinstance(exc, astroid.Class):
279
+ if not isinstance(exc, astroid.ClassDef):
244
280
  # Don't emit the warning if the infered stmt
245
281
  # is None, but the exception handler is something else,
246
282
  # maybe it was redefined.
@@ -261,25 +297,22 @@ class ExceptionsChecker(BaseChecker):
261
297
  node=handler.type,
262
298
  args=(part.as_string(), ))
263
299
  return
300
+
264
301
  if (not inherit_from_std_ex(exc) and
265
- exc.root().name != BUILTINS_NAME):
302
+ exc.name not in self.builtin_exceptions):
266
303
  if has_known_bases(exc):
267
304
  self.add_message('catching-non-exception',
268
305
  node=handler.type,
269
306
  args=(exc.name, ))
270
307
 
271
- @check_messages('bare-except', 'broad-except', 'pointless-except',
308
+ @check_messages('bare-except', 'broad-except',
272
309
  'binary-op-exception', 'bad-except-order',
273
- 'catching-non-exception')
310
+ 'catching-non-exception', 'duplicate-except')
274
311
  def visit_tryexcept(self, node):
275
312
  """check for empty except"""
276
313
  exceptions_classes = []
277
314
  nb_handlers = len(node.handlers)
278
315
  for index, handler in enumerate(node.handlers):
279
- # single except doing nothing but "pass" without else clause
280
- if is_empty(handler.body) and not node.orelse:
281
- self.add_message('pointless-except',
282
- node=handler.type or handler.body[0])
283
316
  if handler.type is None:
284
317
  if not is_raising(handler.body):
285
318
  self.add_message('bare-except', node=handler)
@@ -298,7 +331,7 @@ class ExceptionsChecker(BaseChecker):
298
331
  except astroid.InferenceError:
299
332
  continue
300
333
  for part, exc in excs:
301
- if exc is YES:
334
+ if exc is astroid.YES:
302
335
  continue
303
336
  if (isinstance(exc, astroid.Instance)
304
337
  and inherit_from_std_ex(exc)):
@@ -307,11 +340,11 @@ class ExceptionsChecker(BaseChecker):
307
340
 
308
341
  self._check_catching_non_exception(handler, exc, part)
309
342
 
310
- if not isinstance(exc, astroid.Class):
343
+ if not isinstance(exc, astroid.ClassDef):
311
344
  continue
312
345
 
313
346
  exc_ancestors = [anc for anc in exc.ancestors()
314
- if isinstance(anc, astroid.Class)]
347
+ if isinstance(anc, astroid.ClassDef)]
315
348
  for previous_exc in exceptions_classes:
316
349
  if previous_exc in exc_ancestors:
317
350
  msg = '%s is an ancestor class of %s' % (
@@ -324,6 +357,10 @@ class ExceptionsChecker(BaseChecker):
324
357
  self.add_message('broad-except',
325
358
  args=exc.name, node=handler.type)
326
359
 
360
+ if exc in exceptions_classes:
361
+ self.add_message('duplicate-except',
362
+ args=exc.name, node=handler.type)
363
+
327
364
  exceptions_classes += [exc for _, exc in excs]
328
365
 
329
366