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
@@ -17,17 +17,21 @@
17
17
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
18
  """some functions that may be useful for various checkers
19
19
  """
20
-
20
+ import functools
21
21
  import re
22
22
  import sys
23
23
  import string
24
+ import warnings
25
+
26
+ import six
27
+ from six.moves import map, builtins # pylint: disable=redefined-builtin
24
28
 
25
29
  import astroid
26
30
  from astroid import scoped_nodes
27
- from logilab.common.compat import builtins
28
31
 
29
32
  BUILTINS_NAME = builtins.__name__
30
- COMP_NODE_TYPES = astroid.ListComp, astroid.SetComp, astroid.DictComp, astroid.GenExpr
33
+ COMP_NODE_TYPES = (astroid.ListComp, astroid.SetComp,
34
+ astroid.DictComp, astroid.GeneratorExp)
31
35
  PY3K = sys.version_info[0] == 3
32
36
 
33
37
  if not PY3K:
@@ -36,6 +40,60 @@ else:
36
40
  EXCEPTIONS_MODULE = "builtins"
37
41
  ABC_METHODS = set(('abc.abstractproperty', 'abc.abstractmethod',
38
42
  'abc.abstractclassmethod', 'abc.abstractstaticmethod'))
43
+ ITER_METHOD = '__iter__'
44
+ NEXT_METHOD = 'next' if six.PY2 else '__next__'
45
+ GETITEM_METHOD = '__getitem__'
46
+ CONTAINS_METHOD = '__contains__'
47
+ KEYS_METHOD = 'keys'
48
+
49
+ # Dictionary which maps the number of expected parameters a
50
+ # special method can have to a set of special methods.
51
+ # The following keys are used to denote the parameters restrictions:
52
+ #
53
+ # * None: variable number of parameters
54
+ # * number: exactly that number of parameters
55
+ # * tuple: this are the odd ones. Basically it means that the function
56
+ # can work with any number of arguments from that tuple,
57
+ # although it's best to implement it in order to accept
58
+ # all of them.
59
+ _SPECIAL_METHODS_PARAMS = {
60
+ None: ('__new__', '__init__', '__call__'),
61
+
62
+ 0: ('__del__', '__repr__', '__str__', '__bytes__', '__hash__', '__bool__',
63
+ '__dir__', '__len__', '__length_hint__', '__iter__', '__reversed__',
64
+ '__neg__', '__pos__', '__abs__', '__invert__', '__complex__', '__int__',
65
+ '__float__', '__neg__', '__pos__', '__abs__', '__complex__', '__int__',
66
+ '__float__', '__index__', '__enter__', '__aenter__', '__getnewargs_ex__',
67
+ '__getnewargs__', '__getstate__', '__reduce__', '__copy__',
68
+ '__unicode__', '__nonzero__', '__await__', '__aiter__', '__anext__'),
69
+
70
+ 1: ('__format__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__',
71
+ '__ge__', '__getattr__', '__getattribute__', '__delattr__',
72
+ '__delete__', '__instancecheck__', '__subclasscheck__',
73
+ '__getitem__', '__missing__', '__delitem__', '__contains__',
74
+ '__add__', '__sub__', '__mul__', '__truediv__', '__floordiv__',
75
+ '__mod__', '__divmod__', '__lshift__', '__rshift__', '__and__',
76
+ '__xor__', '__or__', '__radd__', '__rsub__', '__rmul__', '__rtruediv__',
77
+ '__rmod__', '__rdivmod__', '__rpow__', '__rlshift__', '__rrshift__',
78
+ '__rand__', '__rxor__', '__ror__', '__iadd__', '__isub__', '__imul__',
79
+ '__itruediv__', '__ifloordiv__', '__imod__', '__ilshift__',
80
+ '__irshift__', '__iand__', '__ixor__', '__ior__', '__ipow__',
81
+ '__setstate__', '__reduce_ex__', '__deepcopy__', '__cmp__',
82
+ '__matmul__', '__rmatmul__'),
83
+
84
+ 2: ('__setattr__', '__get__', '__set__', '__setitem__'),
85
+
86
+ 3: ('__exit__', '__aexit__'),
87
+
88
+ (0, 1): ('__round__', ),
89
+ }
90
+
91
+ SPECIAL_METHODS_PARAMS = {
92
+ name: params
93
+ for params, methods in _SPECIAL_METHODS_PARAMS.items()
94
+ for name in methods
95
+ }
96
+ PYMETHODS = set(SPECIAL_METHODS_PARAMS)
39
97
 
40
98
 
41
99
  class NoSuchArgumentError(Exception):
@@ -67,39 +125,21 @@ def clobber_in_except(node):
67
125
  Returns (True, args for W0623) if assignment clobbers an existing variable,
68
126
  (False, None) otherwise.
69
127
  """
70
- if isinstance(node, astroid.AssAttr):
128
+ if isinstance(node, astroid.AssignAttr):
71
129
  return (True, (node.attrname, 'object %r' % (node.expr.as_string(),)))
72
- elif isinstance(node, astroid.AssName):
130
+ elif isinstance(node, astroid.AssignName):
73
131
  name = node.name
74
132
  if is_builtin(name):
75
133
  return (True, (name, 'builtins'))
76
134
  else:
77
135
  stmts = node.lookup(name)[1]
78
- if (stmts and not isinstance(stmts[0].ass_type(),
136
+ if (stmts and not isinstance(stmts[0].assign_type(),
79
137
  (astroid.Assign, astroid.AugAssign,
80
138
  astroid.ExceptHandler))):
81
139
  return (True, (name, 'outer scope (line %s)' % stmts[0].fromlineno))
82
140
  return (False, None)
83
141
 
84
142
 
85
- def safe_infer(node):
86
- """return the inferred value for the given node.
87
- Return None if inference failed or if there is some ambiguity (more than
88
- one node has been inferred)
89
- """
90
- try:
91
- inferit = node.infer()
92
- value = next(inferit)
93
- except astroid.InferenceError:
94
- return
95
- try:
96
- next(inferit)
97
- return # None if there is ambiguity on the inferred node
98
- except astroid.InferenceError:
99
- return # there is some kind of ambiguity
100
- except StopIteration:
101
- return value
102
-
103
143
  def is_super(node):
104
144
  """return True if the node is referencing the "super" builtin function
105
145
  """
@@ -122,10 +162,6 @@ def is_raising(body):
122
162
  return True
123
163
  return False
124
164
 
125
- def is_empty(body):
126
- """return true if the given node does nothing but 'pass'"""
127
- return len(body) == 1 and isinstance(body[0], astroid.Pass)
128
-
129
165
  builtins = builtins.__dict__.copy()
130
166
  SPECIAL_BUILTINS = ('__builtins__',) # '__path__', '__file__')
131
167
 
@@ -133,14 +169,10 @@ def is_builtin_object(node):
133
169
  """Returns True if the given node is an object from the __builtin__ module."""
134
170
  return node and node.root().name == BUILTINS_NAME
135
171
 
136
- def is_builtin(name): # was is_native_builtin
172
+ def is_builtin(name):
137
173
  """return true if <name> could be considered as a builtin defined by python
138
174
  """
139
- if name in builtins:
140
- return True
141
- if name in SPECIAL_BUILTINS:
142
- return True
143
- return False
175
+ return name in builtins or name in SPECIAL_BUILTINS
144
176
 
145
177
  def is_defined_before(var_node):
146
178
  """return True if the variable node is defined by a parent node (list,
@@ -151,11 +183,11 @@ def is_defined_before(var_node):
151
183
  _node = var_node.parent
152
184
  while _node:
153
185
  if isinstance(_node, COMP_NODE_TYPES):
154
- for ass_node in _node.nodes_of_class(astroid.AssName):
186
+ for ass_node in _node.nodes_of_class(astroid.AssignName):
155
187
  if ass_node.name == varname:
156
188
  return True
157
189
  elif isinstance(_node, astroid.For):
158
- for ass_node in _node.target.nodes_of_class(astroid.AssName):
190
+ for ass_node in _node.target.nodes_of_class(astroid.AssignName):
159
191
  if ass_node.name == varname:
160
192
  return True
161
193
  elif isinstance(_node, astroid.With):
@@ -163,17 +195,27 @@ def is_defined_before(var_node):
163
195
  if expr.parent_of(var_node):
164
196
  break
165
197
  if (ids and
166
- isinstance(ids, astroid.AssName) and
198
+ isinstance(ids, astroid.AssignName) and
167
199
  ids.name == varname):
168
200
  return True
169
- elif isinstance(_node, (astroid.Lambda, astroid.Function)):
201
+ elif isinstance(_node, (astroid.Lambda, astroid.FunctionDef)):
170
202
  if _node.args.is_argument(varname):
203
+ # If the name is found inside a default value
204
+ # of a function, then let the search continue
205
+ # in the parent's tree.
206
+ if _node.args.parent_of(var_node):
207
+ try:
208
+ _node.args.default_value(varname)
209
+ _node = _node.parent
210
+ continue
211
+ except astroid.NoDefault:
212
+ pass
171
213
  return True
172
214
  if getattr(_node, 'name', None) == varname:
173
215
  return True
174
216
  break
175
217
  elif isinstance(_node, astroid.ExceptHandler):
176
- if isinstance(_node.name, astroid.AssName):
218
+ if isinstance(_node.name, astroid.AssignName):
177
219
  ass_node = _node.name
178
220
  if ass_node.name == varname:
179
221
  return True
@@ -183,10 +225,10 @@ def is_defined_before(var_node):
183
225
  _node = stmt.previous_sibling()
184
226
  lineno = stmt.fromlineno
185
227
  while _node and _node.fromlineno == lineno:
186
- for ass_node in _node.nodes_of_class(astroid.AssName):
228
+ for ass_node in _node.nodes_of_class(astroid.AssignName):
187
229
  if ass_node.name == varname:
188
230
  return True
189
- for imp_node in _node.nodes_of_class((astroid.From, astroid.Import)):
231
+ for imp_node in _node.nodes_of_class((astroid.ImportFrom, astroid.Import)):
190
232
  if varname in [name[1] or name[0] for name in imp_node.names]:
191
233
  return True
192
234
  _node = _node.previous_sibling()
@@ -197,7 +239,7 @@ def is_func_default(node):
197
239
  value
198
240
  """
199
241
  parent = node.scope()
200
- if isinstance(parent, astroid.Function):
242
+ if isinstance(parent, astroid.FunctionDef):
201
243
  for default_node in parent.args.defaults:
202
244
  for default_name_node in default_node.nodes_of_class(astroid.Name):
203
245
  if default_name_node is node:
@@ -234,49 +276,20 @@ def is_ancestor_name(frame, node):
234
276
  def assign_parent(node):
235
277
  """return the higher parent which is not an AssName, Tuple or List node
236
278
  """
237
- while node and isinstance(node, (astroid.AssName,
279
+ while node and isinstance(node, (astroid.AssignName,
238
280
  astroid.Tuple,
239
281
  astroid.List)):
240
282
  node = node.parent
241
283
  return node
242
284
 
243
- def overrides_an_abstract_method(class_node, name):
244
- """return True if pnode is a parent of node"""
245
- for ancestor in class_node.ancestors():
246
- if name in ancestor and isinstance(ancestor[name], astroid.Function) and \
247
- ancestor[name].is_abstract(pass_is_abstract=False):
248
- return True
249
- return False
250
285
 
251
286
  def overrides_a_method(class_node, name):
252
287
  """return True if <name> is a method overridden from an ancestor"""
253
288
  for ancestor in class_node.ancestors():
254
- if name in ancestor and isinstance(ancestor[name], astroid.Function):
289
+ if name in ancestor and isinstance(ancestor[name], astroid.FunctionDef):
255
290
  return True
256
291
  return False
257
292
 
258
- PYMETHODS = set(('__new__', '__init__', '__del__', '__hash__',
259
- '__str__', '__repr__',
260
- '__len__', '__iter__',
261
- '__delete__', '__get__', '__set__',
262
- '__getitem__', '__setitem__', '__delitem__', '__contains__',
263
- '__getattribute__', '__getattr__', '__setattr__', '__delattr__',
264
- '__call__',
265
- '__enter__', '__exit__',
266
- '__cmp__', '__ge__', '__gt__', '__le__', '__lt__', '__eq__',
267
- '__nonzero__', '__neg__', '__invert__',
268
- '__mul__', '__imul__', '__rmul__',
269
- '__div__', '__idiv__', '__rdiv__',
270
- '__add__', '__iadd__', '__radd__',
271
- '__sub__', '__isub__', '__rsub__',
272
- '__pow__', '__ipow__', '__rpow__',
273
- '__mod__', '__imod__', '__rmod__',
274
- '__and__', '__iand__', '__rand__',
275
- '__or__', '__ior__', '__ror__',
276
- '__xor__', '__ixor__', '__rxor__',
277
- # XXX To be continued
278
- ))
279
-
280
293
  def check_messages(*messages):
281
294
  """decorator to store messages that are handled by a checker method"""
282
295
 
@@ -370,7 +383,7 @@ def is_attr_protected(attrname):
370
383
  """return True if attribute name is protected (start with _ and some other
371
384
  details), False otherwise.
372
385
  """
373
- return attrname[0] == '_' and not attrname == '_' and not (
386
+ return attrname[0] == '_' and attrname != '_' and not (
374
387
  attrname.startswith('__') and attrname.endswith('__'))
375
388
 
376
389
  def node_frame_class(node):
@@ -379,7 +392,7 @@ def node_frame_class(node):
379
392
  """
380
393
  klass = node.frame()
381
394
 
382
- while klass is not None and not isinstance(klass, astroid.Class):
395
+ while klass is not None and not isinstance(klass, astroid.ClassDef):
383
396
  if klass.parent is None:
384
397
  klass = None
385
398
  else:
@@ -387,13 +400,6 @@ def node_frame_class(node):
387
400
 
388
401
  return klass
389
402
 
390
- def is_super_call(expr):
391
- """return True if expression node is a function call and if function name
392
- is super. Check before that you're in a method.
393
- """
394
- return (isinstance(expr, astroid.CallFunc) and
395
- isinstance(expr.func, astroid.Name) and
396
- expr.func.name == 'super')
397
403
 
398
404
  def is_attr_private(attrname):
399
405
  """Check that attribute name is private (at least two leading underscores,
@@ -416,15 +422,16 @@ def get_argument_from_call(callfunc_node, position=None, keyword=None):
416
422
  """
417
423
  if position is None and keyword is None:
418
424
  raise ValueError('Must specify at least one of: position or keyword.')
419
- try:
420
- if position is not None and not isinstance(callfunc_node.args[position], astroid.Keyword):
425
+ if position is not None:
426
+ try:
421
427
  return callfunc_node.args[position]
422
- except IndexError as error:
423
- raise NoSuchArgumentError(error)
424
- if keyword:
425
- for arg in callfunc_node.args:
426
- if isinstance(arg, astroid.Keyword) and arg.arg == keyword:
428
+ except IndexError:
429
+ pass
430
+ if keyword and callfunc_node.keywords:
431
+ for arg in callfunc_node.keywords:
432
+ if arg.arg == keyword:
427
433
  return arg.value
434
+
428
435
  raise NoSuchArgumentError
429
436
 
430
437
  def inherit_from_std_ex(node):
@@ -438,49 +445,33 @@ def inherit_from_std_ex(node):
438
445
  return any(inherit_from_std_ex(parent)
439
446
  for parent in node.ancestors(recurs=False))
440
447
 
441
- def is_import_error(handler):
448
+ def error_of_type(handler, error_type):
442
449
  """
443
450
  Check if the given exception handler catches
444
- ImportError.
451
+ the given error_type.
445
452
 
446
- :param handler: A node, representing an ExceptHandler node.
447
- :returns: True if the handler catches ImportError, False otherwise.
453
+ The *handler* parameter is a node, representing an ExceptHandler node.
454
+ The *error_type* can be an exception, such as AttributeError, or it
455
+ can be a tuple of errors.
456
+ The function will return True if the handler catches any of the
457
+ given errors.
448
458
  """
449
- names = None
450
- if isinstance(handler.type, astroid.Tuple):
451
- names = [name for name in handler.type.elts
452
- if isinstance(name, astroid.Name)]
453
- elif isinstance(handler.type, astroid.Name):
454
- names = [handler.type]
455
- else:
456
- # Don't try to infer that.
457
- return
458
- for name in names:
459
- try:
460
- for infered in name.infer():
461
- if (isinstance(infered, astroid.Class) and
462
- inherit_from_std_ex(infered) and
463
- infered.name == 'ImportError'):
464
- return True
465
- except astroid.InferenceError:
466
- continue
459
+ if not isinstance(error_type, tuple):
460
+ error_type = (error_type, )
461
+ expected_errors = {error.__name__ for error in error_type}
462
+ if not handler.type:
463
+ # bare except. While this indeed catches anything, if the desired errors
464
+ # aren't specified directly, then we just ignore it.
465
+ return False
466
+ return handler.catch(expected_errors)
467
+
468
+
469
+ def is_import_error(handler):
470
+ warnings.warn("This function is deprecated in the favour of "
471
+ "error_of_type. It will be removed in Pylint 1.6.",
472
+ DeprecationWarning, stacklevel=2)
473
+ return error_of_type(handler, ImportError)
467
474
 
468
- def has_known_bases(klass):
469
- """Returns true if all base classes of a class could be inferred."""
470
- try:
471
- return klass._all_bases_known
472
- except AttributeError:
473
- pass
474
- for base in klass.bases:
475
- result = safe_infer(base)
476
- # TODO: check for A->B->A->B pattern in class structure too?
477
- if (not isinstance(result, astroid.Class) or
478
- result is klass or
479
- not has_known_bases(result)):
480
- klass._all_bases_known = False
481
- return False
482
- klass._all_bases_known = True
483
- return True
484
475
 
485
476
  def decorated_with_property(node):
486
477
  """ Detect if the given function node is decorated with a property. """
@@ -491,7 +482,7 @@ def decorated_with_property(node):
491
482
  continue
492
483
  try:
493
484
  for infered in decorator.infer():
494
- if isinstance(infered, astroid.Class):
485
+ if isinstance(infered, astroid.ClassDef):
495
486
  if (infered.root().name == BUILTINS_NAME and
496
487
  infered.name == 'property'):
497
488
  return True
@@ -503,19 +494,16 @@ def decorated_with_property(node):
503
494
  pass
504
495
 
505
496
 
506
- def decorated_with_abc(func):
507
- """Determine if the `func` node is decorated with `abc` decorators."""
508
- if func.decorators:
509
- for node in func.decorators.nodes:
510
- try:
511
- infered = next(node.infer())
512
- except astroid.InferenceError:
513
- continue
514
- if infered and infered.qname() in ABC_METHODS:
515
- return True
497
+ def decorated_with(func, qnames):
498
+ """Determine if the `func` node has a decorator with the qualified name `qname`."""
499
+ decorators = func.decorators.nodes if func.decorators else []
500
+ for decorator_node in decorators:
501
+ dec = safe_infer(decorator_node)
502
+ if dec and dec.qname() in qnames:
503
+ return True
516
504
 
517
505
 
518
- def unimplemented_abstract_methods(node, is_abstract_cb=decorated_with_abc):
506
+ def unimplemented_abstract_methods(node, is_abstract_cb=None):
519
507
  """
520
508
  Get the unimplemented abstract methods for the given *node*.
521
509
 
@@ -527,6 +515,9 @@ def unimplemented_abstract_methods(node, is_abstract_cb=decorated_with_abc):
527
515
  For the rest of them, it will return a dictionary of abstract method
528
516
  names and their inferred objects.
529
517
  """
518
+ if is_abstract_cb is None:
519
+ is_abstract_cb = functools.partial(
520
+ decorated_with, qnames=ABC_METHODS)
530
521
  visited = {}
531
522
  try:
532
523
  mro = reversed(node.mro())
@@ -540,14 +531,20 @@ def unimplemented_abstract_methods(node, is_abstract_cb=decorated_with_abc):
540
531
  for ancestor in mro:
541
532
  for obj in ancestor.values():
542
533
  infered = obj
543
- if isinstance(obj, astroid.AssName):
534
+ if isinstance(obj, astroid.AssignName):
544
535
  infered = safe_infer(obj)
545
536
  if not infered:
537
+ # Might be an abstract function,
538
+ # but since we don't have enough information
539
+ # in order to take this decision, we're taking
540
+ # the *safe* decision instead.
541
+ if obj.name in visited:
542
+ del visited[obj.name]
546
543
  continue
547
- if not isinstance(infered, astroid.Function):
544
+ if not isinstance(infered, astroid.FunctionDef):
548
545
  if obj.name in visited:
549
546
  del visited[obj.name]
550
- if isinstance(infered, astroid.Function):
547
+ if isinstance(infered, astroid.FunctionDef):
551
548
  # It's critical to use the original name,
552
549
  # since after inferring, an object can be something
553
550
  # else than expected, as in the case of the
@@ -562,3 +559,183 @@ def unimplemented_abstract_methods(node, is_abstract_cb=decorated_with_abc):
562
559
  elif not abstract and obj.name in visited:
563
560
  del visited[obj.name]
564
561
  return visited
562
+
563
+
564
+ def node_ignores_exception(node, exception):
565
+ """Check if the node is in a TryExcept which handles the given exception."""
566
+ current = node
567
+ ignores = (astroid.ExceptHandler, astroid.TryExcept)
568
+ while current and not isinstance(current.parent, ignores):
569
+ current = current.parent
570
+
571
+ func = functools.partial(error_of_type,
572
+ error_type=(exception, ))
573
+ if current and isinstance(current.parent, astroid.TryExcept):
574
+ if any(map(func, current.parent.handlers)):
575
+ return True
576
+ return False
577
+
578
+
579
+ def class_is_abstract(node):
580
+ """return true if the given class node should be considered as an abstract
581
+ class
582
+ """
583
+ for method in node.methods():
584
+ if method.parent.frame() is node:
585
+ if method.is_abstract(pass_is_abstract=False):
586
+ return True
587
+ return False
588
+
589
+
590
+ def _hasattr(value, attr):
591
+ try:
592
+ value.getattr(attr)
593
+ return True
594
+ except astroid.NotFoundError:
595
+ return False
596
+
597
+
598
+ def is_comprehension(node):
599
+ comprehensions = (astroid.ListComp,
600
+ astroid.SetComp,
601
+ astroid.DictComp,
602
+ astroid.GeneratorExp)
603
+ return isinstance(node, comprehensions)
604
+
605
+
606
+ def _supports_mapping_protocol(value):
607
+ return _hasattr(value, GETITEM_METHOD) and _hasattr(value, KEYS_METHOD)
608
+
609
+
610
+ def _supports_membership_test_protocol(value):
611
+ return _hasattr(value, CONTAINS_METHOD)
612
+
613
+
614
+ def _supports_iteration_protocol(value):
615
+ return _hasattr(value, ITER_METHOD) or _hasattr(value, GETITEM_METHOD)
616
+
617
+
618
+ def _supports_subscript_protocol(value):
619
+ return _hasattr(value, GETITEM_METHOD)
620
+
621
+
622
+ def _is_abstract_class_name(name):
623
+ lname = name.lower()
624
+ is_mixin = lname.endswith('mixin')
625
+ is_abstract = lname.startswith('abstract')
626
+ is_base = lname.startswith('base') or lname.endswith('base')
627
+ return is_mixin or is_abstract or is_base
628
+
629
+
630
+ def is_inside_abstract_class(node):
631
+ while node is not None:
632
+ if isinstance(node, astroid.ClassDef):
633
+ if class_is_abstract(node):
634
+ return True
635
+ name = getattr(node, 'name', None)
636
+ if name is not None and _is_abstract_class_name(name):
637
+ return True
638
+ node = node.parent
639
+ return False
640
+
641
+
642
+ def is_iterable(value):
643
+ if isinstance(value, astroid.ClassDef):
644
+ if not has_known_bases(value):
645
+ return True
646
+ # classobj can only be iterable if it has an iterable metaclass
647
+ meta = value.metaclass()
648
+ if meta is not None:
649
+ if _supports_iteration_protocol(meta):
650
+ return True
651
+ if isinstance(value, astroid.Instance):
652
+ if not has_known_bases(value):
653
+ return True
654
+ if _supports_iteration_protocol(value):
655
+ return True
656
+ return False
657
+
658
+
659
+ def is_mapping(value):
660
+ if isinstance(value, astroid.ClassDef):
661
+ if not has_known_bases(value):
662
+ return True
663
+ # classobj can only be a mapping if it has a metaclass is mapping
664
+ meta = value.metaclass()
665
+ if meta is not None:
666
+ if _supports_mapping_protocol(meta):
667
+ return True
668
+ if isinstance(value, astroid.Instance):
669
+ if not has_known_bases(value):
670
+ return True
671
+ if _supports_mapping_protocol(value):
672
+ return True
673
+ return False
674
+
675
+
676
+ def supports_membership_test(value):
677
+ if isinstance(value, astroid.ClassDef):
678
+ if not has_known_bases(value):
679
+ return True
680
+ meta = value.metaclass()
681
+ if meta is not None and _supports_membership_test_protocol(meta):
682
+ return True
683
+ if isinstance(value, astroid.Instance):
684
+ if not has_known_bases(value):
685
+ return True
686
+ if _supports_membership_test_protocol(value):
687
+ return True
688
+ return is_iterable(value)
689
+
690
+
691
+ def supports_subscript(value):
692
+ if isinstance(value, astroid.ClassDef):
693
+ if not has_known_bases(value):
694
+ return True
695
+ meta = value.metaclass()
696
+ if meta is not None and _supports_subscript_protocol(meta):
697
+ return True
698
+ if isinstance(value, astroid.Instance):
699
+ if not has_known_bases(value):
700
+ return True
701
+ if _supports_subscript_protocol(value):
702
+ return True
703
+ return False
704
+
705
+ # TODO(cpopa): deprecate these or leave them as aliases?
706
+ def safe_infer(node, context=None):
707
+ """Return the inferred value for the given node.
708
+
709
+ Return None if inference failed or if there is some ambiguity (more than
710
+ one node has been inferred).
711
+ """
712
+ try:
713
+ inferit = node.infer(context=context)
714
+ value = next(inferit)
715
+ except astroid.InferenceError:
716
+ return
717
+ try:
718
+ next(inferit)
719
+ return # None if there is ambiguity on the inferred node
720
+ except astroid.InferenceError:
721
+ return # there is some kind of ambiguity
722
+ except StopIteration:
723
+ return value
724
+
725
+
726
+ def has_known_bases(klass, context=None):
727
+ """Return true if all base classes of a class could be inferred."""
728
+ try:
729
+ return klass._all_bases_known
730
+ except AttributeError:
731
+ pass
732
+ for base in klass.bases:
733
+ result = safe_infer(base, context=context)
734
+ # TODO: check for A->B->A->B pattern in class structure too?
735
+ if (not isinstance(result, astroid.ClassDef) or
736
+ result is klass or
737
+ not has_known_bases(result, context=context)):
738
+ klass._all_bases_known = False
739
+ return False
740
+ klass._all_bases_known = True
741
+ return True