libv8 7.8.279.23.0beta1 → 8.4.255.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (719) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +11 -14
  4. data/CHANGELOG.md +7 -1
  5. data/README.md +10 -11
  6. data/Rakefile +30 -36
  7. data/ext/libv8/builder.rb +2 -1
  8. data/lib/libv8/version.rb +1 -1
  9. data/libv8.gemspec +1 -3
  10. data/vendor/depot_tools/{cipd.ps1 → .cipd_impl.ps1} +0 -0
  11. data/vendor/depot_tools/.gitattributes +1 -1
  12. data/vendor/depot_tools/.gitignore +3 -1
  13. data/vendor/depot_tools/.style.yapf +3 -1
  14. data/vendor/depot_tools/.vpython +55 -0
  15. data/vendor/depot_tools/.vpython3 +23 -0
  16. data/vendor/depot_tools/CROS_OWNERS +3 -1
  17. data/vendor/depot_tools/GOMA_OWNERS +9 -0
  18. data/vendor/depot_tools/LUCI_OWNERS +5 -0
  19. data/vendor/depot_tools/OWNERS +21 -6
  20. data/vendor/depot_tools/PRESUBMIT.py +35 -18
  21. data/vendor/depot_tools/README.git-cl.md +0 -14
  22. data/vendor/depot_tools/README.md +1 -1
  23. data/vendor/depot_tools/WATCHLISTS +2 -2
  24. data/vendor/depot_tools/auth.py +60 -772
  25. data/vendor/depot_tools/autoninja +12 -6
  26. data/vendor/depot_tools/autoninja.bat +6 -6
  27. data/vendor/depot_tools/autoninja.py +64 -27
  28. data/vendor/depot_tools/bb +1 -1
  29. data/vendor/depot_tools/bootstrap/{win/README.md → README.md} +28 -14
  30. data/vendor/depot_tools/bootstrap/{win/win_tools.py → bootstrap.py} +60 -43
  31. data/vendor/depot_tools/bootstrap/{win/git-bash.template.sh → git-bash.template.sh} +1 -1
  32. data/vendor/depot_tools/bootstrap/{win/git.template.bat → git.template.bat} +0 -0
  33. data/vendor/depot_tools/bootstrap/manifest.txt +27 -0
  34. data/vendor/depot_tools/bootstrap/manifest_bleeding_edge.txt +27 -0
  35. data/vendor/depot_tools/bootstrap/{win/profile.d.python.sh → profile.d.python.sh} +0 -0
  36. data/vendor/depot_tools/bootstrap/{win/python27.bleeding_edge.bat → python27.bat} +0 -0
  37. data/vendor/depot_tools/bootstrap/{win/python27.new.bat → python3.bat} +3 -3
  38. data/vendor/depot_tools/bootstrap/{win/win_tools.bat → win_tools.bat} +21 -16
  39. data/vendor/depot_tools/bootstrap_python3 +35 -0
  40. data/vendor/depot_tools/cbuildbot +1 -1
  41. data/vendor/depot_tools/chrome_set_ver +1 -1
  42. data/vendor/depot_tools/cipd +43 -39
  43. data/vendor/depot_tools/cipd.bat +2 -2
  44. data/vendor/depot_tools/cipd_client_version +1 -1
  45. data/vendor/depot_tools/cipd_client_version.digests +15 -14
  46. data/vendor/depot_tools/cipd_manifest.txt +31 -8
  47. data/vendor/depot_tools/cipd_manifest.versions +278 -158
  48. data/vendor/depot_tools/cit.py +9 -7
  49. data/vendor/depot_tools/clang_format.py +4 -1
  50. data/vendor/depot_tools/clang_format_merge_driver.py +10 -8
  51. data/vendor/depot_tools/compile_single_file.py +7 -2
  52. data/vendor/depot_tools/cpplint.py +51 -45
  53. data/vendor/depot_tools/cros +87 -0
  54. data/vendor/depot_tools/cros_sdk +1 -1
  55. data/vendor/depot_tools/crosjobs +13 -0
  56. data/vendor/depot_tools/detect_host_arch.py +0 -1
  57. data/vendor/depot_tools/dirmd +12 -0
  58. data/vendor/depot_tools/dirmd.bat +7 -0
  59. data/vendor/depot_tools/download_from_google_storage.py +47 -27
  60. data/vendor/depot_tools/ensure_bootstrap +14 -0
  61. data/vendor/depot_tools/fetch +14 -1
  62. data/vendor/depot_tools/fetch.bat +14 -1
  63. data/vendor/depot_tools/fetch.py +5 -7
  64. data/vendor/depot_tools/fetch_configs/chromium.py +6 -4
  65. data/vendor/depot_tools/fetch_configs/devtools-frontend.py +44 -0
  66. data/vendor/depot_tools/fetch_configs/ios_internal.py +10 -19
  67. data/vendor/depot_tools/fix_encoding.py +19 -5
  68. data/vendor/depot_tools/gclient +28 -12
  69. data/vendor/depot_tools/gclient-new-workdir.py +2 -0
  70. data/vendor/depot_tools/gclient.bat +18 -1
  71. data/vendor/depot_tools/gclient.py +156 -118
  72. data/vendor/depot_tools/gclient_eval.py +119 -107
  73. data/vendor/depot_tools/gclient_paths.py +67 -57
  74. data/vendor/depot_tools/gclient_scm.py +180 -169
  75. data/vendor/depot_tools/gclient_utils.py +177 -124
  76. data/vendor/depot_tools/gerrit_client.py +21 -13
  77. data/vendor/depot_tools/gerrit_util.py +188 -228
  78. data/vendor/depot_tools/git-cache +1 -1
  79. data/vendor/depot_tools/git-cl +1 -1
  80. data/vendor/depot_tools/git-drover +1 -1
  81. data/vendor/depot_tools/git-find-releases +1 -1
  82. data/vendor/depot_tools/git-footers +1 -1
  83. data/vendor/depot_tools/git-freeze +1 -1
  84. data/vendor/depot_tools/git-hyper-blame +1 -1
  85. data/vendor/depot_tools/git-map +1 -1
  86. data/vendor/depot_tools/git-map-branches +1 -1
  87. data/vendor/depot_tools/git-mark-merge-base +1 -1
  88. data/vendor/depot_tools/git-nav-downstream +1 -1
  89. data/vendor/depot_tools/git-new-branch +1 -1
  90. data/vendor/depot_tools/git-number +1 -1
  91. data/vendor/depot_tools/git-rebase-update +1 -1
  92. data/vendor/depot_tools/git-rename-branch +1 -1
  93. data/vendor/depot_tools/git-reparent-branch +1 -1
  94. data/vendor/depot_tools/git-retry +1 -1
  95. data/vendor/depot_tools/git-squash-branch +1 -1
  96. data/vendor/depot_tools/git-thaw +1 -1
  97. data/vendor/depot_tools/git-upstream-diff +1 -1
  98. data/vendor/depot_tools/git_cache.py +195 -281
  99. data/vendor/depot_tools/git_cl.py +1506 -2075
  100. data/vendor/depot_tools/git_cl_completion.sh +16 -2
  101. data/vendor/depot_tools/git_common.py +77 -32
  102. data/vendor/depot_tools/git_drover.py +17 -8
  103. data/vendor/depot_tools/git_find_releases.py +11 -9
  104. data/vendor/depot_tools/git_footers.py +13 -9
  105. data/vendor/depot_tools/git_freezer.py +3 -1
  106. data/vendor/depot_tools/git_hyper_blame.py +25 -32
  107. data/vendor/depot_tools/git_map.py +115 -93
  108. data/vendor/depot_tools/git_map_branches.py +11 -10
  109. data/vendor/depot_tools/git_mark_merge_base.py +8 -6
  110. data/vendor/depot_tools/git_nav_downstream.py +9 -6
  111. data/vendor/depot_tools/git_new_branch.py +39 -33
  112. data/vendor/depot_tools/git_number.py +28 -17
  113. data/vendor/depot_tools/git_rebase_update.py +50 -49
  114. data/vendor/depot_tools/git_rename_branch.py +2 -2
  115. data/vendor/depot_tools/git_reparent_branch.py +8 -6
  116. data/vendor/depot_tools/git_upstream_diff.py +4 -2
  117. data/vendor/depot_tools/gn.py +6 -4
  118. data/vendor/depot_tools/goma_auth +12 -0
  119. data/vendor/depot_tools/goma_auth.bat +8 -0
  120. data/vendor/depot_tools/goma_ctl +12 -0
  121. data/vendor/depot_tools/goma_ctl.bat +8 -0
  122. data/vendor/depot_tools/gsutil.py +5 -2
  123. data/vendor/depot_tools/gsutil.py.bat +8 -0
  124. data/vendor/depot_tools/gsutil.vpython +3 -1
  125. data/vendor/depot_tools/infra/config/OWNERS +2 -2
  126. data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
  127. data/vendor/depot_tools/led +1 -1
  128. data/vendor/depot_tools/lockfile.py +116 -0
  129. data/vendor/depot_tools/luci-auth +1 -1
  130. data/vendor/depot_tools/lucicfg +1 -1
  131. data/vendor/depot_tools/mac_toolchain +1 -1
  132. data/vendor/depot_tools/man/html/depot_tools.html +1 -1
  133. data/vendor/depot_tools/man/html/depot_tools_tutorial.html +31 -25
  134. data/vendor/depot_tools/man/html/git-cl.html +1 -1
  135. data/vendor/depot_tools/man/html/git-drover.html +18 -18
  136. data/vendor/depot_tools/man/html/git-footers.html +1 -1
  137. data/vendor/depot_tools/man/html/git-freeze.html +3 -3
  138. data/vendor/depot_tools/man/html/git-hyper-blame.html +1 -1
  139. data/vendor/depot_tools/man/html/git-map-branches.html +2 -2
  140. data/vendor/depot_tools/man/html/git-map.html +1 -1
  141. data/vendor/depot_tools/man/html/git-mark-merge-base.html +1 -1
  142. data/vendor/depot_tools/man/html/git-nav-downstream.html +3 -3
  143. data/vendor/depot_tools/man/html/git-nav-upstream.html +12 -6
  144. data/vendor/depot_tools/man/html/git-new-branch.html +1 -1
  145. data/vendor/depot_tools/man/html/git-rebase-update.html +20 -1
  146. data/vendor/depot_tools/man/html/git-rename-branch.html +1 -1
  147. data/vendor/depot_tools/man/html/git-reparent-branch.html +1 -1
  148. data/vendor/depot_tools/man/html/git-retry.html +1 -1
  149. data/vendor/depot_tools/man/html/git-squash-branch.html +1 -1
  150. data/vendor/depot_tools/man/html/git-thaw.html +1 -1
  151. data/vendor/depot_tools/man/html/git-upstream-diff.html +10 -6
  152. data/vendor/depot_tools/man/man1/git-cl.1 +4 -4
  153. data/vendor/depot_tools/man/man1/git-drover.1 +21 -21
  154. data/vendor/depot_tools/man/man1/git-footers.1 +4 -4
  155. data/vendor/depot_tools/man/man1/git-freeze.1 +6 -6
  156. data/vendor/depot_tools/man/man1/git-hyper-blame.1 +4 -4
  157. data/vendor/depot_tools/man/man1/git-map-branches.1 +4 -4
  158. data/vendor/depot_tools/man/man1/git-map.1 +4 -4
  159. data/vendor/depot_tools/man/man1/git-mark-merge-base.1 +4 -4
  160. data/vendor/depot_tools/man/man1/git-nav-downstream.1 +6 -6
  161. data/vendor/depot_tools/man/man1/git-nav-upstream.1 +15 -9
  162. data/vendor/depot_tools/man/man1/git-new-branch.1 +3 -3
  163. data/vendor/depot_tools/man/man1/git-rebase-update.1 +14 -4
  164. data/vendor/depot_tools/man/man1/git-rename-branch.1 +4 -4
  165. data/vendor/depot_tools/man/man1/git-reparent-branch.1 +4 -4
  166. data/vendor/depot_tools/man/man1/git-retry.1 +4 -4
  167. data/vendor/depot_tools/man/man1/git-squash-branch.1 +4 -4
  168. data/vendor/depot_tools/man/man1/git-thaw.1 +4 -4
  169. data/vendor/depot_tools/man/man1/git-upstream-diff.1 +7 -13
  170. data/vendor/depot_tools/man/man7/depot_tools.7 +4 -4
  171. data/vendor/depot_tools/man/man7/depot_tools_tutorial.7 +31 -25
  172. data/vendor/depot_tools/man/src/common_demo_functions.sh +2 -2
  173. data/vendor/depot_tools/man/src/depot_tools_tutorial.txt +3 -3
  174. data/vendor/depot_tools/man/src/filter_demo_output.py +3 -1
  175. data/vendor/depot_tools/man/src/git-new-branch.txt +2 -1
  176. data/vendor/depot_tools/man/src/git-rebase-update.txt +8 -1
  177. data/vendor/depot_tools/metrics.README.md +5 -2
  178. data/vendor/depot_tools/metrics.py +4 -4
  179. data/vendor/depot_tools/metrics_utils.py +3 -3
  180. data/vendor/depot_tools/my_activity.py +85 -251
  181. data/vendor/depot_tools/ninja +1 -0
  182. data/vendor/depot_tools/ninja-mac +0 -0
  183. data/vendor/depot_tools/ninjalog_uploader.py +146 -145
  184. data/vendor/depot_tools/ninjalog_uploader_wrapper.py +69 -60
  185. data/vendor/depot_tools/owners.py +57 -21
  186. data/vendor/depot_tools/owners_finder.py +28 -14
  187. data/vendor/depot_tools/post_build_ninja_summary.py +76 -48
  188. data/vendor/depot_tools/presubmit_canned_checks.py +293 -106
  189. data/vendor/depot_tools/presubmit_support.py +527 -333
  190. data/vendor/depot_tools/prpc +1 -1
  191. data/vendor/depot_tools/pylint +2 -12
  192. data/vendor/depot_tools/pylint-1.5 +78 -0
  193. data/vendor/depot_tools/pylint-1.6 +78 -0
  194. data/vendor/depot_tools/pylint-1.7 +78 -0
  195. data/vendor/depot_tools/pylint-1.8 +78 -0
  196. data/vendor/depot_tools/pylint-1.9 +78 -0
  197. data/vendor/depot_tools/{depot-tools-auth.bat → pylint.bat} +2 -2
  198. data/vendor/depot_tools/pylint_main.py +45 -0
  199. data/vendor/depot_tools/pylintrc +14 -1
  200. data/vendor/depot_tools/python-bin/python3 +7 -0
  201. data/vendor/depot_tools/python_runner.sh +13 -8
  202. data/vendor/depot_tools/rdb +12 -0
  203. data/vendor/depot_tools/rdb.bat +7 -0
  204. data/vendor/depot_tools/recipes/OWNERS +0 -1
  205. data/vendor/depot_tools/recipes/README.recipes.md +215 -151
  206. data/vendor/depot_tools/recipes/recipe_modules/OWNERS +1 -1
  207. data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +17 -17
  208. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +65 -32
  209. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +12 -4
  210. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +11 -3
  211. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +12 -4
  212. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +22 -8
  213. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +27 -9
  214. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +22 -8
  215. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +22 -8
  216. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/input_commit_with_id_without_repo.json +22 -8
  217. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/multiple_patch_refs.json +22 -8
  218. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +27 -9
  219. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_HEAD.json +12 -4
  220. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_branch_head.json +10 -4
  221. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_specific_commit.json +12 -4
  222. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_master.json +10 -4
  223. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/refs.json +22 -8
  224. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +22 -8
  225. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/resolve_chromium_fixed_version.json +117 -0
  226. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +16 -10
  227. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +34 -10
  228. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +16 -10
  229. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +27 -9
  230. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +27 -9
  231. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +27 -9
  232. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +27 -9
  233. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +27 -9
  234. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +27 -9
  235. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +27 -9
  236. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +0 -5
  237. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +22 -8
  238. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +7 -23
  239. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +187 -114
  240. data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +2 -2
  241. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/do_not_retry_patch_failures_in_cq.py +42 -0
  242. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +1 -0
  243. data/vendor/depot_tools/recipes/recipe_modules/cipd/__init__.py +0 -1
  244. data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +2 -2
  245. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +0 -1
  246. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +0 -1
  247. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +2 -4
  248. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +0 -1
  249. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +0 -1
  250. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +26 -6
  251. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +23 -5
  252. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +23 -5
  253. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +0 -1
  254. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +0 -1
  255. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +0 -1
  256. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +0 -1
  257. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +0 -1
  258. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +0 -1
  259. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +0 -1
  260. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +0 -1
  261. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +0 -1
  262. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +0 -1
  263. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +0 -1
  264. data/vendor/depot_tools/recipes/recipe_modules/cipd/test_api.py +1 -1
  265. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +4 -1
  266. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +4 -2
  267. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +3 -1
  268. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +4 -2
  269. data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +2 -1
  270. data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +82 -13
  271. data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +21 -9
  272. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +3 -4
  273. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +3 -6
  274. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +3 -4
  275. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +7 -7
  276. data/vendor/depot_tools/recipes/recipe_modules/gclient/resources/diff_deps.py +16 -0
  277. data/vendor/depot_tools/recipes/recipe_modules/gclient/test_api.py +4 -0
  278. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/basic.json +55 -0
  279. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/dont have revision yet.json +84 -0
  280. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/no change, exception.json +83 -0
  281. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/windows.json +55 -0
  282. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.py +88 -0
  283. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +9 -21
  284. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/sync_failure.py +24 -0
  285. data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +2 -1
  286. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +7 -12
  287. data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +0 -2
  288. data/vendor/depot_tools/recipes/recipe_modules/git/api.py +9 -17
  289. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +2 -8
  290. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +2 -8
  291. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +2 -8
  292. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +2 -8
  293. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +2 -8
  294. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +2 -8
  295. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +2 -8
  296. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +3 -13
  297. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +2 -8
  298. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +4 -12
  299. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +2 -10
  300. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +1 -7
  301. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +1 -7
  302. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +0 -8
  303. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +3 -10
  304. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +3 -11
  305. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +2 -8
  306. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +3 -13
  307. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +2 -8
  308. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +2 -8
  309. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +0 -5
  310. data/vendor/depot_tools/recipes/recipe_modules/git_cl/__init__.py +1 -1
  311. data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +7 -13
  312. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +21 -16
  313. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.py +1 -2
  314. data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +1 -1
  315. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +0 -1
  316. data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +2 -2
  317. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +0 -1
  318. data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +23 -8
  319. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +52 -1
  320. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.py +15 -0
  321. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +1 -0
  322. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +32 -8
  323. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json +83 -0
  324. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json +83 -0
  325. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json +83 -0
  326. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +0 -1
  327. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +5 -4
  328. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +0 -1
  329. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +21 -2
  330. data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +20 -0
  331. data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +235 -3
  332. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +13 -5
  333. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.py +5 -1
  334. data/vendor/depot_tools/recipes/recipe_modules/presubmit/properties.proto +14 -0
  335. data/vendor/depot_tools/recipes/recipe_modules/presubmit/test_api.py +19 -0
  336. data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/execute.py +247 -0
  337. data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/prepare.py +49 -0
  338. data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +33 -45
  339. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +0 -1
  340. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +64 -21
  341. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +64 -21
  342. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +1 -22
  343. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +1 -22
  344. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +5 -32
  345. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_fetch_ref_timeout.py +29 -0
  346. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.expected/basic.json +5 -0
  347. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.py +22 -0
  348. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_target_ref.py +32 -0
  349. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +0 -1
  350. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +0 -1
  351. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +2 -1
  352. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +1 -6
  353. data/vendor/depot_tools/recipes/recipes.py +49 -28
  354. data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +11 -6
  355. data/vendor/depot_tools/repo +698 -540
  356. data/vendor/depot_tools/roll-dep +14 -1
  357. data/vendor/depot_tools/roll-dep.bat +10 -1
  358. data/vendor/depot_tools/roll_dep.py +15 -10
  359. data/vendor/depot_tools/scm.py +94 -74
  360. data/vendor/depot_tools/setup_color.py +36 -2
  361. data/vendor/depot_tools/split_cl.py +44 -32
  362. data/vendor/depot_tools/subcommand.py +6 -6
  363. data/vendor/depot_tools/subprocess2.py +38 -322
  364. data/vendor/depot_tools/third_party/colorama/LICENSE.txt +0 -1
  365. data/vendor/depot_tools/third_party/colorama/README.chromium +4 -5
  366. data/vendor/depot_tools/third_party/colorama/README.rst +346 -0
  367. data/vendor/depot_tools/third_party/colorama/__init__.py +3 -4
  368. data/vendor/depot_tools/third_party/colorama/ansi.py +82 -30
  369. data/vendor/depot_tools/third_party/colorama/ansitowin32.py +105 -37
  370. data/vendor/depot_tools/third_party/colorama/initialise.py +39 -15
  371. data/vendor/depot_tools/third_party/colorama/win32.py +46 -28
  372. data/vendor/depot_tools/third_party/colorama/winterm.py +80 -31
  373. data/vendor/depot_tools/update_depot_tools +18 -8
  374. data/vendor/depot_tools/update_depot_tools.bat +19 -15
  375. data/vendor/depot_tools/upload_metrics.py +7 -6
  376. data/vendor/depot_tools/upload_to_google_storage.py +22 -15
  377. data/vendor/depot_tools/vpython +4 -4
  378. data/vendor/depot_tools/vpython.bat +1 -1
  379. data/vendor/depot_tools/vpython3 +55 -0
  380. data/vendor/depot_tools/vpython3.bat +12 -0
  381. data/vendor/depot_tools/watchlists.py +14 -11
  382. data/vendor/depot_tools/weekly +4 -2
  383. data/vendor/depot_tools/win32imports.py +61 -0
  384. data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +49 -41
  385. data/vendor/depot_tools/win_toolchain/package_from_installed.py +142 -149
  386. data/vendor/depot_tools/wtf +5 -3
  387. data/vendor/depot_tools/yapf +5 -1
  388. metadata +66 -345
  389. data/vendor/depot_tools/README.testing +0 -23
  390. data/vendor/depot_tools/annotated_gclient.py +0 -89
  391. data/vendor/depot_tools/appengine_mapper.py +0 -23
  392. data/vendor/depot_tools/bootstrap/win/manifest.txt +0 -20
  393. data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +0 -20
  394. data/vendor/depot_tools/bootstrap/win/pylint.new.bat +0 -7
  395. data/vendor/depot_tools/buildbucket.py +0 -186
  396. data/vendor/depot_tools/checkout.py +0 -431
  397. data/vendor/depot_tools/cros +0 -1
  398. data/vendor/depot_tools/dart_format.py +0 -58
  399. data/vendor/depot_tools/depot-tools-auth +0 -8
  400. data/vendor/depot_tools/depot-tools-auth.py +0 -102
  401. data/vendor/depot_tools/my_reviews.py +0 -396
  402. data/vendor/depot_tools/patch.py +0 -548
  403. data/vendor/depot_tools/pylint.py +0 -30
  404. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name.json +0 -48
  405. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +0 -239
  406. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +0 -222
  407. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/__init__.py +0 -4
  408. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/api.py +0 -29
  409. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +0 -15
  410. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +0 -15
  411. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +0 -15
  412. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +0 -15
  413. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +0 -15
  414. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +0 -15
  415. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +0 -15
  416. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +0 -15
  417. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +0 -15
  418. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +0 -15
  419. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.py +0 -33
  420. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +0 -66
  421. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +0 -11
  422. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +0 -45
  423. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +0 -45
  424. data/vendor/depot_tools/rietveld.py +0 -779
  425. data/vendor/depot_tools/roll-dep-svn +0 -8
  426. data/vendor/depot_tools/roll-dep-svn.bat +0 -12
  427. data/vendor/depot_tools/roll_dep_svn.py +0 -430
  428. data/vendor/depot_tools/support/chromite_wrapper +0 -96
  429. data/vendor/depot_tools/third_party/boto/LICENSE +0 -18
  430. data/vendor/depot_tools/third_party/boto/README.chromium +0 -43
  431. data/vendor/depot_tools/third_party/boto/README.rst +0 -163
  432. data/vendor/depot_tools/third_party/boto/__init__.py +0 -793
  433. data/vendor/depot_tools/third_party/boto/auth.py +0 -682
  434. data/vendor/depot_tools/third_party/boto/auth_handler.py +0 -58
  435. data/vendor/depot_tools/third_party/boto/cacerts/__init__.py +0 -22
  436. data/vendor/depot_tools/third_party/boto/cacerts/cacerts.txt +0 -2183
  437. data/vendor/depot_tools/third_party/boto/compat.py +0 -28
  438. data/vendor/depot_tools/third_party/boto/connection.py +0 -1081
  439. data/vendor/depot_tools/third_party/boto/contrib/__init__.py +0 -22
  440. data/vendor/depot_tools/third_party/boto/contrib/ymlmessage.py +0 -52
  441. data/vendor/depot_tools/third_party/boto/core/README +0 -58
  442. data/vendor/depot_tools/third_party/boto/core/__init__.py +0 -23
  443. data/vendor/depot_tools/third_party/boto/core/auth.py +0 -78
  444. data/vendor/depot_tools/third_party/boto/core/credentials.py +0 -154
  445. data/vendor/depot_tools/third_party/boto/core/dictresponse.py +0 -178
  446. data/vendor/depot_tools/third_party/boto/core/service.py +0 -67
  447. data/vendor/depot_tools/third_party/boto/datapipeline/__init__.py +0 -0
  448. data/vendor/depot_tools/third_party/boto/datapipeline/exceptions.py +0 -42
  449. data/vendor/depot_tools/third_party/boto/datapipeline/layer1.py +0 -546
  450. data/vendor/depot_tools/third_party/boto/ecs/__init__.py +0 -90
  451. data/vendor/depot_tools/third_party/boto/ecs/item.py +0 -153
  452. data/vendor/depot_tools/third_party/boto/exception.py +0 -476
  453. data/vendor/depot_tools/third_party/boto/file/README +0 -49
  454. data/vendor/depot_tools/third_party/boto/file/__init__.py +0 -28
  455. data/vendor/depot_tools/third_party/boto/file/bucket.py +0 -112
  456. data/vendor/depot_tools/third_party/boto/file/connection.py +0 -33
  457. data/vendor/depot_tools/third_party/boto/file/key.py +0 -199
  458. data/vendor/depot_tools/third_party/boto/file/simpleresultset.py +0 -30
  459. data/vendor/depot_tools/third_party/boto/fps/__init__.py +0 -21
  460. data/vendor/depot_tools/third_party/boto/fps/connection.py +0 -369
  461. data/vendor/depot_tools/third_party/boto/fps/exception.py +0 -344
  462. data/vendor/depot_tools/third_party/boto/fps/response.py +0 -175
  463. data/vendor/depot_tools/third_party/boto/gs/__init__.py +0 -22
  464. data/vendor/depot_tools/third_party/boto/gs/acl.py +0 -304
  465. data/vendor/depot_tools/third_party/boto/gs/bucket.py +0 -870
  466. data/vendor/depot_tools/third_party/boto/gs/bucketlistresultset.py +0 -64
  467. data/vendor/depot_tools/third_party/boto/gs/connection.py +0 -103
  468. data/vendor/depot_tools/third_party/boto/gs/cors.py +0 -169
  469. data/vendor/depot_tools/third_party/boto/gs/key.py +0 -704
  470. data/vendor/depot_tools/third_party/boto/gs/resumable_upload_handler.py +0 -659
  471. data/vendor/depot_tools/third_party/boto/gs/user.py +0 -54
  472. data/vendor/depot_tools/third_party/boto/handler.py +0 -44
  473. data/vendor/depot_tools/third_party/boto/https_connection.py +0 -124
  474. data/vendor/depot_tools/third_party/boto/jsonresponse.py +0 -163
  475. data/vendor/depot_tools/third_party/boto/manage/__init__.py +0 -23
  476. data/vendor/depot_tools/third_party/boto/manage/cmdshell.py +0 -241
  477. data/vendor/depot_tools/third_party/boto/manage/propget.py +0 -64
  478. data/vendor/depot_tools/third_party/boto/manage/server.py +0 -556
  479. data/vendor/depot_tools/third_party/boto/manage/task.py +0 -175
  480. data/vendor/depot_tools/third_party/boto/manage/test_manage.py +0 -34
  481. data/vendor/depot_tools/third_party/boto/manage/volume.py +0 -420
  482. data/vendor/depot_tools/third_party/boto/mashups/__init__.py +0 -23
  483. data/vendor/depot_tools/third_party/boto/mashups/interactive.py +0 -97
  484. data/vendor/depot_tools/third_party/boto/mashups/iobject.py +0 -115
  485. data/vendor/depot_tools/third_party/boto/mashups/order.py +0 -211
  486. data/vendor/depot_tools/third_party/boto/mashups/server.py +0 -395
  487. data/vendor/depot_tools/third_party/boto/plugin.py +0 -90
  488. data/vendor/depot_tools/third_party/boto/provider.py +0 -337
  489. data/vendor/depot_tools/third_party/boto/pyami/__init__.py +0 -22
  490. data/vendor/depot_tools/third_party/boto/pyami/bootstrap.py +0 -134
  491. data/vendor/depot_tools/third_party/boto/pyami/config.py +0 -229
  492. data/vendor/depot_tools/third_party/boto/pyami/copybot.cfg +0 -60
  493. data/vendor/depot_tools/third_party/boto/pyami/copybot.py +0 -97
  494. data/vendor/depot_tools/third_party/boto/pyami/helloworld.py +0 -28
  495. data/vendor/depot_tools/third_party/boto/pyami/launch_ami.py +0 -178
  496. data/vendor/depot_tools/third_party/boto/pyami/scriptbase.py +0 -44
  497. data/vendor/depot_tools/third_party/boto/pyami/startup.py +0 -60
  498. data/vendor/depot_tools/third_party/boto/regioninfo.py +0 -63
  499. data/vendor/depot_tools/third_party/boto/resultset.py +0 -169
  500. data/vendor/depot_tools/third_party/boto/roboto/__init__.py +0 -1
  501. data/vendor/depot_tools/third_party/boto/roboto/awsqueryrequest.py +0 -504
  502. data/vendor/depot_tools/third_party/boto/roboto/awsqueryservice.py +0 -121
  503. data/vendor/depot_tools/third_party/boto/roboto/param.py +0 -147
  504. data/vendor/depot_tools/third_party/boto/s3/__init__.py +0 -84
  505. data/vendor/depot_tools/third_party/boto/s3/acl.py +0 -164
  506. data/vendor/depot_tools/third_party/boto/s3/bucket.py +0 -1634
  507. data/vendor/depot_tools/third_party/boto/s3/bucketlistresultset.py +0 -139
  508. data/vendor/depot_tools/third_party/boto/s3/bucketlogging.py +0 -83
  509. data/vendor/depot_tools/third_party/boto/s3/connection.py +0 -540
  510. data/vendor/depot_tools/third_party/boto/s3/cors.py +0 -210
  511. data/vendor/depot_tools/third_party/boto/s3/deletemarker.py +0 -55
  512. data/vendor/depot_tools/third_party/boto/s3/key.py +0 -1712
  513. data/vendor/depot_tools/third_party/boto/s3/keyfile.py +0 -134
  514. data/vendor/depot_tools/third_party/boto/s3/lifecycle.py +0 -231
  515. data/vendor/depot_tools/third_party/boto/s3/multidelete.py +0 -138
  516. data/vendor/depot_tools/third_party/boto/s3/multipart.py +0 -315
  517. data/vendor/depot_tools/third_party/boto/s3/prefix.py +0 -42
  518. data/vendor/depot_tools/third_party/boto/s3/resumable_download_handler.py +0 -339
  519. data/vendor/depot_tools/third_party/boto/s3/tagging.py +0 -71
  520. data/vendor/depot_tools/third_party/boto/s3/user.py +0 -49
  521. data/vendor/depot_tools/third_party/boto/s3/website.py +0 -237
  522. data/vendor/depot_tools/third_party/boto/services/__init__.py +0 -23
  523. data/vendor/depot_tools/third_party/boto/services/bs.py +0 -179
  524. data/vendor/depot_tools/third_party/boto/services/message.py +0 -58
  525. data/vendor/depot_tools/third_party/boto/services/result.py +0 -136
  526. data/vendor/depot_tools/third_party/boto/services/service.py +0 -161
  527. data/vendor/depot_tools/third_party/boto/services/servicedef.py +0 -91
  528. data/vendor/depot_tools/third_party/boto/services/sonofmmm.cfg +0 -43
  529. data/vendor/depot_tools/third_party/boto/services/sonofmmm.py +0 -81
  530. data/vendor/depot_tools/third_party/boto/services/submit.py +0 -88
  531. data/vendor/depot_tools/third_party/boto/ses/__init__.py +0 -54
  532. data/vendor/depot_tools/third_party/boto/ses/connection.py +0 -521
  533. data/vendor/depot_tools/third_party/boto/ses/exceptions.py +0 -77
  534. data/vendor/depot_tools/third_party/boto/storage_uri.py +0 -835
  535. data/vendor/depot_tools/third_party/boto/sts/__init__.py +0 -55
  536. data/vendor/depot_tools/third_party/boto/sts/connection.py +0 -207
  537. data/vendor/depot_tools/third_party/boto/sts/credentials.py +0 -215
  538. data/vendor/depot_tools/third_party/boto/utils.py +0 -927
  539. data/vendor/depot_tools/third_party/colorama/README.txt +0 -304
  540. data/vendor/depot_tools/third_party/fancy_urllib/README +0 -22
  541. data/vendor/depot_tools/third_party/fancy_urllib/__init__.py +0 -460
  542. data/vendor/depot_tools/third_party/logilab/README.chromium +0 -6
  543. data/vendor/depot_tools/third_party/logilab/__init__.py +0 -0
  544. data/vendor/depot_tools/third_party/logilab/astroid/LICENSE.txt +0 -340
  545. data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +0 -11
  546. data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +0 -136
  547. data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +0 -42
  548. data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +0 -233
  549. data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +0 -548
  550. data/vendor/depot_tools/third_party/logilab/astroid/astpeephole.py +0 -86
  551. data/vendor/depot_tools/third_party/logilab/astroid/bases.py +0 -636
  552. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_builtin_inference.py +0 -336
  553. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +0 -15
  554. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_gi.py +0 -195
  555. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_mechanize.py +0 -18
  556. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_nose.py +0 -82
  557. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +0 -62
  558. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +0 -76
  559. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +0 -44
  560. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_six.py +0 -288
  561. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +0 -65
  562. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +0 -473
  563. data/vendor/depot_tools/third_party/logilab/astroid/builder.py +0 -263
  564. data/vendor/depot_tools/third_party/logilab/astroid/context.py +0 -81
  565. data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +0 -75
  566. data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +0 -71
  567. data/vendor/depot_tools/third_party/logilab/astroid/inference.py +0 -359
  568. data/vendor/depot_tools/third_party/logilab/astroid/manager.py +0 -267
  569. data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +0 -147
  570. data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +0 -741
  571. data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +0 -1053
  572. data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +0 -87
  573. data/vendor/depot_tools/third_party/logilab/astroid/objects.py +0 -186
  574. data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +0 -470
  575. data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +0 -390
  576. data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +0 -989
  577. data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +0 -1716
  578. data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +0 -201
  579. data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +0 -96
  580. data/vendor/depot_tools/third_party/logilab/astroid/util.py +0 -89
  581. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +0 -19
  582. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +0 -11
  583. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +0 -20
  584. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +0 -1421
  585. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +0 -9
  586. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +0 -246
  587. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +0 -414
  588. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +0 -13
  589. data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +0 -24
  590. data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +0 -11
  591. data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +0 -19
  592. data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +0 -2729
  593. data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +0 -96
  594. data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +0 -512
  595. data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +0 -228
  596. data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +0 -901
  597. data/vendor/depot_tools/third_party/mock/LICENSE.txt +0 -26
  598. data/vendor/depot_tools/third_party/mock/README.chromium +0 -24
  599. data/vendor/depot_tools/third_party/mock/__init__.py +0 -2366
  600. data/vendor/depot_tools/third_party/oauth2client/LICENSE +0 -202
  601. data/vendor/depot_tools/third_party/oauth2client/MODIFICATIONS.diff +0 -66
  602. data/vendor/depot_tools/third_party/oauth2client/README.chromium +0 -15
  603. data/vendor/depot_tools/third_party/oauth2client/__init__.py +0 -5
  604. data/vendor/depot_tools/third_party/oauth2client/anyjson.py +0 -32
  605. data/vendor/depot_tools/third_party/oauth2client/appengine.py +0 -963
  606. data/vendor/depot_tools/third_party/oauth2client/client.py +0 -1363
  607. data/vendor/depot_tools/third_party/oauth2client/clientsecrets.py +0 -153
  608. data/vendor/depot_tools/third_party/oauth2client/crypt.py +0 -377
  609. data/vendor/depot_tools/third_party/oauth2client/django_orm.py +0 -134
  610. data/vendor/depot_tools/third_party/oauth2client/file.py +0 -124
  611. data/vendor/depot_tools/third_party/oauth2client/gce.py +0 -90
  612. data/vendor/depot_tools/third_party/oauth2client/keyring_storage.py +0 -109
  613. data/vendor/depot_tools/third_party/oauth2client/locked_file.py +0 -373
  614. data/vendor/depot_tools/third_party/oauth2client/multistore_file.py +0 -465
  615. data/vendor/depot_tools/third_party/oauth2client/old_run.py +0 -160
  616. data/vendor/depot_tools/third_party/oauth2client/tools.py +0 -243
  617. data/vendor/depot_tools/third_party/oauth2client/util.py +0 -196
  618. data/vendor/depot_tools/third_party/oauth2client/xsrfutil.py +0 -113
  619. data/vendor/depot_tools/third_party/protobuf26/README.chromium +0 -23
  620. data/vendor/depot_tools/third_party/protobuf26/__init__.py +0 -0
  621. data/vendor/depot_tools/third_party/protobuf26/compiler/__init__.py +0 -0
  622. data/vendor/depot_tools/third_party/protobuf26/compiler/plugin_pb2.py +0 -184
  623. data/vendor/depot_tools/third_party/protobuf26/descriptor.py +0 -849
  624. data/vendor/depot_tools/third_party/protobuf26/descriptor_database.py +0 -137
  625. data/vendor/depot_tools/third_party/protobuf26/descriptor_pb2.py +0 -1522
  626. data/vendor/depot_tools/third_party/protobuf26/descriptor_pool.py +0 -643
  627. data/vendor/depot_tools/third_party/protobuf26/internal/__init__.py +0 -0
  628. data/vendor/depot_tools/third_party/protobuf26/internal/api_implementation.py +0 -89
  629. data/vendor/depot_tools/third_party/protobuf26/internal/containers.py +0 -269
  630. data/vendor/depot_tools/third_party/protobuf26/internal/cpp_message.py +0 -663
  631. data/vendor/depot_tools/third_party/protobuf26/internal/decoder.py +0 -831
  632. data/vendor/depot_tools/third_party/protobuf26/internal/encoder.py +0 -788
  633. data/vendor/depot_tools/third_party/protobuf26/internal/enum_type_wrapper.py +0 -89
  634. data/vendor/depot_tools/third_party/protobuf26/internal/message_listener.py +0 -78
  635. data/vendor/depot_tools/third_party/protobuf26/internal/python_message.py +0 -1247
  636. data/vendor/depot_tools/third_party/protobuf26/internal/type_checkers.py +0 -328
  637. data/vendor/depot_tools/third_party/protobuf26/internal/wire_format.py +0 -268
  638. data/vendor/depot_tools/third_party/protobuf26/message.py +0 -284
  639. data/vendor/depot_tools/third_party/protobuf26/message_factory.py +0 -155
  640. data/vendor/depot_tools/third_party/protobuf26/reflection.py +0 -205
  641. data/vendor/depot_tools/third_party/protobuf26/service.py +0 -226
  642. data/vendor/depot_tools/third_party/protobuf26/service_reflection.py +0 -284
  643. data/vendor/depot_tools/third_party/protobuf26/symbol_database.py +0 -185
  644. data/vendor/depot_tools/third_party/protobuf26/text_encoding.py +0 -110
  645. data/vendor/depot_tools/third_party/protobuf26/text_format.py +0 -873
  646. data/vendor/depot_tools/third_party/pylint.py +0 -37
  647. data/vendor/depot_tools/third_party/pylint/LICENSE.txt +0 -340
  648. data/vendor/depot_tools/third_party/pylint/README.chromium +0 -30
  649. data/vendor/depot_tools/third_party/pylint/__init__.py +0 -46
  650. data/vendor/depot_tools/third_party/pylint/__main__.py +0 -3
  651. data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +0 -80
  652. data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +0 -123
  653. data/vendor/depot_tools/third_party/pylint/checkers/async.py +0 -82
  654. data/vendor/depot_tools/third_party/pylint/checkers/base.py +0 -2010
  655. data/vendor/depot_tools/third_party/pylint/checkers/classes.py +0 -1120
  656. data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +0 -348
  657. data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +0 -369
  658. data/vendor/depot_tools/third_party/pylint/checkers/format.py +0 -993
  659. data/vendor/depot_tools/third_party/pylint/checkers/imports.py +0 -654
  660. data/vendor/depot_tools/third_party/pylint/checkers/logging.py +0 -258
  661. data/vendor/depot_tools/third_party/pylint/checkers/misc.py +0 -105
  662. data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +0 -169
  663. data/vendor/depot_tools/third_party/pylint/checkers/python3.py +0 -591
  664. data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +0 -129
  665. data/vendor/depot_tools/third_party/pylint/checkers/similar.py +0 -371
  666. data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +0 -264
  667. data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +0 -280
  668. data/vendor/depot_tools/third_party/pylint/checkers/strings.py +0 -618
  669. data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +0 -974
  670. data/vendor/depot_tools/third_party/pylint/checkers/utils.py +0 -741
  671. data/vendor/depot_tools/third_party/pylint/checkers/variables.py +0 -1191
  672. data/vendor/depot_tools/third_party/pylint/config.py +0 -820
  673. data/vendor/depot_tools/third_party/pylint/epylint.py +0 -181
  674. data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
  675. data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +0 -311
  676. data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +0 -62
  677. data/vendor/depot_tools/third_party/pylint/graph.py +0 -179
  678. data/vendor/depot_tools/third_party/pylint/gui.py +0 -531
  679. data/vendor/depot_tools/third_party/pylint/interfaces.py +0 -102
  680. data/vendor/depot_tools/third_party/pylint/lint.py +0 -1381
  681. data/vendor/depot_tools/third_party/pylint/pyreverse/__init__.py +0 -5
  682. data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +0 -230
  683. data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +0 -258
  684. data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +0 -372
  685. data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +0 -147
  686. data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +0 -210
  687. data/vendor/depot_tools/third_party/pylint/pyreverse/vcgutils.py +0 -198
  688. data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +0 -198
  689. data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +0 -149
  690. data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +0 -27
  691. data/vendor/depot_tools/third_party/pylint/reporters/html.py +0 -108
  692. data/vendor/depot_tools/third_party/pylint/reporters/json.py +0 -64
  693. data/vendor/depot_tools/third_party/pylint/reporters/text.py +0 -237
  694. data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +0 -106
  695. data/vendor/depot_tools/third_party/pylint/reporters/ureports/html_writer.py +0 -93
  696. data/vendor/depot_tools/third_party/pylint/reporters/ureports/nodes.py +0 -181
  697. data/vendor/depot_tools/third_party/pylint/reporters/ureports/text_writer.py +0 -99
  698. data/vendor/depot_tools/third_party/pylint/testutils.py +0 -414
  699. data/vendor/depot_tools/third_party/pylint/utils.py +0 -1148
  700. data/vendor/depot_tools/third_party/pymox/COPYING +0 -202
  701. data/vendor/depot_tools/third_party/pymox/MANIFEST.in +0 -5
  702. data/vendor/depot_tools/third_party/pymox/README +0 -56
  703. data/vendor/depot_tools/third_party/pymox/__init__.py +0 -0
  704. data/vendor/depot_tools/third_party/pymox/mox.py +0 -1643
  705. data/vendor/depot_tools/third_party/pymox/mox_test.py +0 -1708
  706. data/vendor/depot_tools/third_party/pymox/mox_test_helper.py +0 -76
  707. data/vendor/depot_tools/third_party/pymox/setup.py +0 -14
  708. data/vendor/depot_tools/third_party/pymox/stubout.py +0 -142
  709. data/vendor/depot_tools/third_party/pymox/stubout_test.py +0 -47
  710. data/vendor/depot_tools/third_party/pymox/stubout_testee.py +0 -2
  711. data/vendor/depot_tools/third_party/simplejson/LICENSE.txt +0 -19
  712. data/vendor/depot_tools/third_party/simplejson/PKG-INFO +0 -29
  713. data/vendor/depot_tools/third_party/simplejson/__init__.py +0 -437
  714. data/vendor/depot_tools/third_party/simplejson/decoder.py +0 -421
  715. data/vendor/depot_tools/third_party/simplejson/encoder.py +0 -501
  716. data/vendor/depot_tools/third_party/simplejson/ordered_dict.py +0 -119
  717. data/vendor/depot_tools/third_party/simplejson/scanner.py +0 -77
  718. data/vendor/depot_tools/third_party/simplejson/tool.py +0 -39
  719. data/vendor/depot_tools/third_party/upload.py +0 -2565
@@ -1,1191 +0,0 @@
1
- # Copyright (c) 2003-2014 LOGILAB S.A. (Paris, FRANCE).
2
- # http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
- #
4
- # This program is free software; you can redistribute it and/or modify it under
5
- # the terms of the GNU General Public License as published by the Free Software
6
- # Foundation; either version 2 of the License, or (at your option) any later
7
- # version.
8
- #
9
- # This program is distributed in the hope that it will be useful, but WITHOUT
10
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
- # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License along with
14
- # this program; if not, write to the Free Software Foundation, Inc.,
15
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16
- """variables checkers for Python code
17
- """
18
- import os
19
- import sys
20
- import re
21
- from copy import copy
22
-
23
- import six
24
-
25
- import astroid
26
- from astroid import modutils
27
- from pylint.interfaces import IAstroidChecker, INFERENCE, INFERENCE_FAILURE, HIGH
28
- from pylint.utils import get_global_option
29
- from pylint.checkers import BaseChecker
30
- from pylint.checkers.utils import (
31
- PYMETHODS, is_ancestor_name, is_builtin,
32
- is_defined_before, is_error, is_func_default, is_func_decorator,
33
- assign_parent, check_messages, is_inside_except, clobber_in_except,
34
- get_all_elements, has_known_bases, node_ignores_exception,
35
- is_inside_abstract_class, is_comprehension, is_iterable,
36
- safe_infer)
37
-
38
- SPECIAL_OBJ = re.compile("^_{2}[a-z]+_{2}$")
39
- FUTURE = '__future__'
40
- PY3K = sys.version_info >= (3, 0)
41
-
42
-
43
- def _is_from_future_import(stmt, name):
44
- """Check if the name is a future import from another module."""
45
- try:
46
- module = stmt.do_import_module(stmt.modname)
47
- except astroid.InferenceError:
48
- return
49
-
50
- for local_node in module.locals.get(name, []):
51
- if (isinstance(local_node, astroid.ImportFrom)
52
- and local_node.modname == FUTURE):
53
- return True
54
-
55
-
56
- def in_for_else_branch(parent, stmt):
57
- """Returns True if stmt in inside the else branch for a parent For stmt."""
58
- return (isinstance(parent, astroid.For) and
59
- any(else_stmt.parent_of(stmt) for else_stmt in parent.orelse))
60
-
61
- def overridden_method(klass, name):
62
- """get overridden method if any"""
63
- try:
64
- parent = next(klass.local_attr_ancestors(name))
65
- except (StopIteration, KeyError):
66
- return None
67
- try:
68
- meth_node = parent[name]
69
- except KeyError:
70
- # We have found an ancestor defining <name> but it's not in the local
71
- # dictionary. This may happen with astroid built from living objects.
72
- return None
73
- if isinstance(meth_node, astroid.FunctionDef):
74
- return meth_node
75
- return None
76
-
77
- def _get_unpacking_extra_info(node, infered):
78
- """return extra information to add to the message for unpacking-non-sequence
79
- and unbalanced-tuple-unpacking errors
80
- """
81
- more = ''
82
- infered_module = infered.root().name
83
- if node.root().name == infered_module:
84
- if node.lineno == infered.lineno:
85
- more = ' %s' % infered.as_string()
86
- elif infered.lineno:
87
- more = ' defined at line %s' % infered.lineno
88
- elif infered.lineno:
89
- more = ' defined at line %s of %s' % (infered.lineno, infered_module)
90
- return more
91
-
92
- def _detect_global_scope(node, frame, defframe):
93
- """ Detect that the given frames shares a global
94
- scope.
95
-
96
- Two frames shares a global scope when neither
97
- of them are hidden under a function scope, as well
98
- as any of parent scope of them, until the root scope.
99
- In this case, depending from something defined later on
100
- will not work, because it is still undefined.
101
-
102
- Example:
103
- class A:
104
- # B has the same global scope as `C`, leading to a NameError.
105
- class B(C): ...
106
- class C: ...
107
-
108
- """
109
- def_scope = scope = None
110
- if frame and frame.parent:
111
- scope = frame.parent.scope()
112
- if defframe and defframe.parent:
113
- def_scope = defframe.parent.scope()
114
- if isinstance(frame, astroid.FunctionDef):
115
- # If the parent of the current node is a
116
- # function, then it can be under its scope
117
- # (defined in, which doesn't concern us) or
118
- # the `->` part of annotations. The same goes
119
- # for annotations of function arguments, they'll have
120
- # their parent the Arguments node.
121
- if not isinstance(node.parent,
122
- (astroid.FunctionDef, astroid.Arguments)):
123
- return False
124
- elif any(not isinstance(f, (astroid.ClassDef, astroid.Module))
125
- for f in (frame, defframe)):
126
- # Not interested in other frames, since they are already
127
- # not in a global scope.
128
- return False
129
-
130
- break_scopes = []
131
- for s in (scope, def_scope):
132
- # Look for parent scopes. If there is anything different
133
- # than a module or a class scope, then they frames don't
134
- # share a global scope.
135
- parent_scope = s
136
- while parent_scope:
137
- if not isinstance(parent_scope, (astroid.ClassDef, astroid.Module)):
138
- break_scopes.append(parent_scope)
139
- break
140
- if parent_scope.parent:
141
- parent_scope = parent_scope.parent.scope()
142
- else:
143
- break
144
- if break_scopes and len(set(break_scopes)) != 1:
145
- # Store different scopes than expected.
146
- # If the stored scopes are, in fact, the very same, then it means
147
- # that the two frames (frame and defframe) shares the same scope,
148
- # and we could apply our lineno analysis over them.
149
- # For instance, this works when they are inside a function, the node
150
- # that uses a definition and the definition itself.
151
- return False
152
- # At this point, we are certain that frame and defframe shares a scope
153
- # and the definition of the first depends on the second.
154
- return frame.lineno < defframe.lineno
155
-
156
- def _fix_dot_imports(not_consumed):
157
- """ Try to fix imports with multiple dots, by returning a dictionary
158
- with the import names expanded. The function unflattens root imports,
159
- like 'xml' (when we have both 'xml.etree' and 'xml.sax'), to 'xml.etree'
160
- and 'xml.sax' respectively.
161
- """
162
- # TODO: this should be improved in issue astroid #46
163
- names = {}
164
- for name, stmts in six.iteritems(not_consumed):
165
- if any(isinstance(stmt, astroid.AssignName)
166
- and isinstance(stmt.assign_type(), astroid.AugAssign)
167
- for stmt in stmts):
168
- continue
169
- for stmt in stmts:
170
- if not isinstance(stmt, (astroid.ImportFrom, astroid.Import)):
171
- continue
172
- for imports in stmt.names:
173
- second_name = None
174
- if imports[0] == "*":
175
- # In case of wildcard imports,
176
- # pick the name from inside the imported module.
177
- second_name = name
178
- else:
179
- if imports[0].find(".") > -1 or name in imports:
180
- # Most likely something like 'xml.etree',
181
- # which will appear in the .locals as 'xml'.
182
- # Only pick the name if it wasn't consumed.
183
- second_name = imports[0]
184
- if second_name and second_name not in names:
185
- names[second_name] = stmt
186
- return sorted(names.items(), key=lambda a: a[1].fromlineno)
187
-
188
- def _find_frame_imports(name, frame):
189
- """
190
- Detect imports in the frame, with the required
191
- *name*. Such imports can be considered assignments.
192
- Returns True if an import for the given name was found.
193
- """
194
- imports = frame.nodes_of_class((astroid.Import, astroid.ImportFrom))
195
- for import_node in imports:
196
- for import_name, import_alias in import_node.names:
197
- # If the import uses an alias, check only that.
198
- # Otherwise, check only the import name.
199
- if import_alias:
200
- if import_alias == name:
201
- return True
202
- elif import_name and import_name == name:
203
- return True
204
-
205
-
206
- MSGS = {
207
- 'E0601': ('Using variable %r before assignment',
208
- 'used-before-assignment',
209
- 'Used when a local variable is accessed before it\'s \
210
- assignment.'),
211
- 'E0602': ('Undefined variable %r',
212
- 'undefined-variable',
213
- 'Used when an undefined variable is accessed.'),
214
- 'E0603': ('Undefined variable name %r in __all__',
215
- 'undefined-all-variable',
216
- 'Used when an undefined variable name is referenced in __all__.'),
217
- 'E0604': ('Invalid object %r in __all__, must contain only strings',
218
- 'invalid-all-object',
219
- 'Used when an invalid (non-string) object occurs in __all__.'),
220
- 'E0611': ('No name %r in module %r',
221
- 'no-name-in-module',
222
- 'Used when a name cannot be found in a module.'),
223
-
224
- 'W0601': ('Global variable %r undefined at the module level',
225
- 'global-variable-undefined',
226
- 'Used when a variable is defined through the "global" statement \
227
- but the variable is not defined in the module scope.'),
228
- 'W0602': ('Using global for %r but no assignment is done',
229
- 'global-variable-not-assigned',
230
- 'Used when a variable is defined through the "global" statement \
231
- but no assignment to this variable is done.'),
232
- 'W0603': ('Using the global statement', # W0121
233
- 'global-statement',
234
- 'Used when you use the "global" statement to update a global \
235
- variable. Pylint just try to discourage this \
236
- usage. That doesn\'t mean you can not use it !'),
237
- 'W0604': ('Using the global statement at the module level', # W0103
238
- 'global-at-module-level',
239
- 'Used when you use the "global" statement at the module level \
240
- since it has no effect'),
241
- 'W0611': ('Unused %s',
242
- 'unused-import',
243
- 'Used when an imported module or variable is not used.'),
244
- 'W0612': ('Unused variable %r',
245
- 'unused-variable',
246
- 'Used when a variable is defined but not used.'),
247
- 'W0613': ('Unused argument %r',
248
- 'unused-argument',
249
- 'Used when a function or method argument is not used.'),
250
- 'W0614': ('Unused import %s from wildcard import',
251
- 'unused-wildcard-import',
252
- 'Used when an imported module or variable is not used from a \
253
- `\'from X import *\'` style import.'),
254
-
255
- 'W0621': ('Redefining name %r from outer scope (line %s)',
256
- 'redefined-outer-name',
257
- 'Used when a variable\'s name hide a name defined in the outer \
258
- scope.'),
259
- 'W0622': ('Redefining built-in %r',
260
- 'redefined-builtin',
261
- 'Used when a variable or function override a built-in.'),
262
- 'W0623': ('Redefining name %r from %s in exception handler',
263
- 'redefine-in-handler',
264
- 'Used when an exception handler assigns the exception \
265
- to an existing name'),
266
-
267
- 'W0631': ('Using possibly undefined loop variable %r',
268
- 'undefined-loop-variable',
269
- 'Used when an loop variable (i.e. defined by a for loop or \
270
- a list comprehension or a generator expression) is used outside \
271
- the loop.'),
272
-
273
- 'E0632': ('Possible unbalanced tuple unpacking with '
274
- 'sequence%s: '
275
- 'left side has %d label(s), right side has %d value(s)',
276
- 'unbalanced-tuple-unpacking',
277
- 'Used when there is an unbalanced tuple unpacking in assignment',
278
- {'old_names': [('W0632', 'unbalanced-tuple-unpacking')]}),
279
-
280
- 'E0633': ('Attempting to unpack a non-sequence%s',
281
- 'unpacking-non-sequence',
282
- 'Used when something which is not '
283
- 'a sequence is used in an unpack assignment',
284
- {'old_names': [('W0633', 'unpacking-non-sequence')]}),
285
-
286
- 'W0640': ('Cell variable %s defined in loop',
287
- 'cell-var-from-loop',
288
- 'A variable used in a closure is defined in a loop. '
289
- 'This will result in all closures using the same value for '
290
- 'the closed-over variable.'),
291
-
292
- }
293
-
294
- class VariablesChecker(BaseChecker):
295
- """checks for
296
- * unused variables / imports
297
- * undefined variables
298
- * redefinition of variable from builtins or from an outer scope
299
- * use of variable before assignment
300
- * __all__ consistency
301
- """
302
-
303
- __implements__ = IAstroidChecker
304
-
305
- name = 'variables'
306
- msgs = MSGS
307
- priority = -1
308
- options = (("init-import",
309
- {'default': 0, 'type' : 'yn', 'metavar' : '<y_or_n>',
310
- 'help' : 'Tells whether we should check for unused import in \
311
- __init__ files.'}),
312
- ("dummy-variables-rgx",
313
- {'default': ('_$|dummy'),
314
- 'type' :'regexp', 'metavar' : '<regexp>',
315
- 'help' : 'A regular expression matching the name of dummy \
316
- variables (i.e. expectedly not used).'}),
317
- ("additional-builtins",
318
- {'default': (), 'type' : 'csv',
319
- 'metavar' : '<comma separated list>',
320
- 'help' : 'List of additional names supposed to be defined in \
321
- builtins. Remember that you should avoid to define new builtins when possible.'
322
- }),
323
- ("callbacks",
324
- {'default' : ('cb_', '_cb'), 'type' : 'csv',
325
- 'metavar' : '<callbacks>',
326
- 'help' : 'List of strings which can identify a callback '
327
- 'function by name. A callback name must start or '
328
- 'end with one of those strings.'}
329
- )
330
- )
331
- def __init__(self, linter=None):
332
- BaseChecker.__init__(self, linter)
333
- self._to_consume = None # list of tuples: (to_consume:dict, consumed:dict, scope_type:str)
334
- self._checking_mod_attr = None
335
-
336
- def visit_module(self, node):
337
- """visit module : update consumption analysis variable
338
- checks globals doesn't overrides builtins
339
- """
340
- self._to_consume = [(copy(node.locals), {}, 'module')]
341
- for name, stmts in six.iteritems(node.locals):
342
- if is_builtin(name) and not is_inside_except(stmts[0]):
343
- # do not print Redefining builtin for additional builtins
344
- self.add_message('redefined-builtin', args=name, node=stmts[0])
345
-
346
- @check_messages('unused-import', 'unused-wildcard-import',
347
- 'redefined-builtin', 'undefined-all-variable',
348
- 'invalid-all-object')
349
- def leave_module(self, node):
350
- """leave module: check globals
351
- """
352
- assert len(self._to_consume) == 1
353
- not_consumed = self._to_consume.pop()[0]
354
- # attempt to check for __all__ if defined
355
- if '__all__' in node.locals:
356
- self._check_all(node, not_consumed)
357
- # don't check unused imports in __init__ files
358
- if not self.config.init_import and node.package:
359
- return
360
-
361
- self._check_imports(not_consumed)
362
-
363
- def _check_all(self, node, not_consumed):
364
- assigned = next(node.igetattr('__all__'))
365
- if assigned is astroid.YES:
366
- return
367
-
368
- for elt in getattr(assigned, 'elts', ()):
369
- try:
370
- elt_name = next(elt.infer())
371
- except astroid.InferenceError:
372
- continue
373
- if elt_name is astroid.YES:
374
- continue
375
- if not elt_name.parent:
376
- continue
377
-
378
- if (not isinstance(elt_name, astroid.Const)
379
- or not isinstance(elt_name.value, six.string_types)):
380
- self.add_message('invalid-all-object',
381
- args=elt.as_string(), node=elt)
382
- continue
383
-
384
- elt_name = elt_name.value
385
- # If elt is in not_consumed, remove it from not_consumed
386
- if elt_name in not_consumed:
387
- del not_consumed[elt_name]
388
- continue
389
-
390
- if elt_name not in node.locals:
391
- if not node.package:
392
- self.add_message('undefined-all-variable',
393
- args=(elt_name, ),
394
- node=elt)
395
- else:
396
- basename = os.path.splitext(node.file)[0]
397
- if os.path.basename(basename) == '__init__':
398
- name = node.name + "." + elt_name
399
- try:
400
- modutils.file_from_modpath(name.split("."))
401
- except ImportError:
402
- self.add_message('undefined-all-variable',
403
- args=(elt_name, ),
404
- node=elt)
405
- except SyntaxError:
406
- # don't yield an syntax-error warning,
407
- # because it will be later yielded
408
- # when the file will be checked
409
- pass
410
-
411
- def _check_imports(self, not_consumed):
412
- local_names = _fix_dot_imports(not_consumed)
413
- checked = set()
414
- for name, stmt in local_names:
415
- for imports in stmt.names:
416
- real_name = imported_name = imports[0]
417
- if imported_name == "*":
418
- real_name = name
419
- as_name = imports[1]
420
- if real_name in checked:
421
- continue
422
- if name not in (real_name, as_name):
423
- continue
424
- checked.add(real_name)
425
-
426
- if (isinstance(stmt, astroid.Import) or
427
- (isinstance(stmt, astroid.ImportFrom) and
428
- not stmt.modname)):
429
- if (isinstance(stmt, astroid.ImportFrom) and
430
- SPECIAL_OBJ.search(imported_name)):
431
- # Filter special objects (__doc__, __all__) etc.,
432
- # because they can be imported for exporting.
433
- continue
434
- if as_name is None:
435
- msg = "import %s" % imported_name
436
- else:
437
- msg = "%s imported as %s" % (imported_name, as_name)
438
- self.add_message('unused-import', args=msg, node=stmt)
439
- elif (isinstance(stmt, astroid.ImportFrom)
440
- and stmt.modname != FUTURE):
441
-
442
- if SPECIAL_OBJ.search(imported_name):
443
- # Filter special objects (__doc__, __all__) etc.,
444
- # because they can be imported for exporting.
445
- continue
446
-
447
- if _is_from_future_import(stmt, name):
448
- # Check if the name is in fact loaded from a
449
- # __future__ import in another module.
450
- continue
451
-
452
- if imported_name == '*':
453
- self.add_message('unused-wildcard-import',
454
- args=name, node=stmt)
455
- else:
456
- if as_name is None:
457
- msg = "%s imported from %s" % (imported_name, stmt.modname)
458
- else:
459
- fields = (imported_name, stmt.modname, as_name)
460
- msg = "%s imported from %s as %s" % fields
461
- self.add_message('unused-import', args=msg, node=stmt)
462
- del self._to_consume
463
-
464
- def visit_classdef(self, node):
465
- """visit class: update consumption analysis variable
466
- """
467
- self._to_consume.append((copy(node.locals), {}, 'class'))
468
-
469
- def leave_classdef(self, _):
470
- """leave class: update consumption analysis variable
471
- """
472
- # do not check for not used locals here (no sense)
473
- self._to_consume.pop()
474
-
475
- def visit_lambda(self, node):
476
- """visit lambda: update consumption analysis variable
477
- """
478
- self._to_consume.append((copy(node.locals), {}, 'lambda'))
479
-
480
- def leave_lambda(self, _):
481
- """leave lambda: update consumption analysis variable
482
- """
483
- # do not check for not used locals here
484
- self._to_consume.pop()
485
-
486
- def visit_generatorexp(self, node):
487
- """visit genexpr: update consumption analysis variable
488
- """
489
- self._to_consume.append((copy(node.locals), {}, 'comprehension'))
490
-
491
- def leave_generatorexp(self, _):
492
- """leave genexpr: update consumption analysis variable
493
- """
494
- # do not check for not used locals here
495
- self._to_consume.pop()
496
-
497
- def visit_dictcomp(self, node):
498
- """visit dictcomp: update consumption analysis variable
499
- """
500
- self._to_consume.append((copy(node.locals), {}, 'comprehension'))
501
-
502
- def leave_dictcomp(self, _):
503
- """leave dictcomp: update consumption analysis variable
504
- """
505
- # do not check for not used locals here
506
- self._to_consume.pop()
507
-
508
- def visit_setcomp(self, node):
509
- """visit setcomp: update consumption analysis variable
510
- """
511
- self._to_consume.append((copy(node.locals), {}, 'comprehension'))
512
-
513
- def leave_setcomp(self, _):
514
- """leave setcomp: update consumption analysis variable
515
- """
516
- # do not check for not used locals here
517
- self._to_consume.pop()
518
-
519
- def visit_functiondef(self, node):
520
- """visit function: update consumption analysis variable and check locals
521
- """
522
- self._to_consume.append((copy(node.locals), {}, 'function'))
523
- if not (self.linter.is_message_enabled('redefined-outer-name') or
524
- self.linter.is_message_enabled('redefined-builtin')):
525
- return
526
- globs = node.root().globals
527
- for name, stmt in node.items():
528
- if is_inside_except(stmt):
529
- continue
530
- if name in globs and not isinstance(stmt, astroid.Global):
531
- definition = globs[name][0]
532
- if (isinstance(definition, astroid.ImportFrom)
533
- and definition.modname == FUTURE):
534
- # It is a __future__ directive, not a symbol.
535
- continue
536
-
537
- line = definition.fromlineno
538
- dummy_rgx = self.config.dummy_variables_rgx
539
- if not dummy_rgx.match(name):
540
- self.add_message('redefined-outer-name',
541
- args=(name, line), node=stmt)
542
- elif is_builtin(name):
543
- # do not print Redefining builtin for additional builtins
544
- self.add_message('redefined-builtin', args=name, node=stmt)
545
-
546
- def leave_functiondef(self, node):
547
- """leave function: check function's locals are consumed"""
548
- not_consumed = self._to_consume.pop()[0]
549
- if not (self.linter.is_message_enabled('unused-variable') or
550
- self.linter.is_message_enabled('unused-argument')):
551
- return
552
- # don't check arguments of function which are only raising an exception
553
- if is_error(node):
554
- return
555
- # don't check arguments of abstract methods or within an interface
556
- is_method = node.is_method()
557
- klass = node.parent.frame()
558
- if is_method and node.is_abstract():
559
- return
560
- if is_method and isinstance(klass, astroid.ClassDef):
561
- confidence = INFERENCE if has_known_bases(klass) else INFERENCE_FAILURE
562
- else:
563
- confidence = HIGH
564
- authorized_rgx = self.config.dummy_variables_rgx
565
- called_overridden = False
566
- argnames = node.argnames()
567
- global_names = set()
568
- nonlocal_names = set()
569
- for global_stmt in node.nodes_of_class(astroid.Global):
570
- global_names.update(set(global_stmt.names))
571
- for nonlocal_stmt in node.nodes_of_class(astroid.Nonlocal):
572
- nonlocal_names.update(set(nonlocal_stmt.names))
573
-
574
- for name, stmts in six.iteritems(not_consumed):
575
- # ignore some special names specified by user configuration
576
- if authorized_rgx.match(name):
577
- continue
578
- # ignore names imported by the global statement
579
- # FIXME: should only ignore them if it's assigned latter
580
- stmt = stmts[0]
581
- if isinstance(stmt, astroid.Global):
582
- continue
583
- if isinstance(stmt, (astroid.Import, astroid.ImportFrom)):
584
- # Detect imports, assigned to global statements.
585
- if not global_names:
586
- continue
587
- skip = False
588
- for import_name, import_alias in stmt.names:
589
- # If the import uses an alias, check only that.
590
- # Otherwise, check only the import name.
591
- if import_alias:
592
- if import_alias in global_names:
593
- skip = True
594
- break
595
- elif import_name in global_names:
596
- skip = True
597
- break
598
- if skip:
599
- continue
600
-
601
- # care about functions with unknown argument (builtins)
602
- if name in argnames:
603
- if is_method:
604
- # don't warn for the first argument of a (non static) method
605
- if node.type != 'staticmethod' and name == argnames[0]:
606
- continue
607
- # don't warn for argument of an overridden method
608
- if not called_overridden:
609
- overridden = overridden_method(klass, node.name)
610
- called_overridden = True
611
- if overridden is not None and name in overridden.argnames():
612
- continue
613
- if node.name in PYMETHODS and node.name not in ('__init__', '__new__'):
614
- continue
615
- # don't check callback arguments
616
- if any(node.name.startswith(cb) or node.name.endswith(cb)
617
- for cb in self.config.callbacks):
618
- continue
619
- self.add_message('unused-argument', args=name, node=stmt,
620
- confidence=confidence)
621
- else:
622
- if stmt.parent and isinstance(stmt.parent, astroid.Assign):
623
- if name in nonlocal_names:
624
- continue
625
- self.add_message('unused-variable', args=name, node=stmt)
626
-
627
- visit_asyncfunctiondef = visit_functiondef
628
- leave_asyncfunctiondef = leave_functiondef
629
-
630
- @check_messages('global-variable-undefined', 'global-variable-not-assigned',
631
- 'global-statement', 'global-at-module-level',
632
- 'redefined-builtin')
633
- def visit_global(self, node):
634
- """check names imported exists in the global scope"""
635
- frame = node.frame()
636
- if isinstance(frame, astroid.Module):
637
- self.add_message('global-at-module-level', node=node)
638
- return
639
- module = frame.root()
640
- default_message = True
641
- for name in node.names:
642
- try:
643
- assign_nodes = module.getattr(name)
644
- except astroid.NotFoundError:
645
- # unassigned global, skip
646
- assign_nodes = []
647
- for anode in assign_nodes:
648
- if anode.parent is None:
649
- # node returned for builtin attribute such as __file__,
650
- # __doc__, etc...
651
- continue
652
- if anode.frame() is frame:
653
- # same scope level assignment
654
- break
655
- else:
656
- if not _find_frame_imports(name, frame):
657
- self.add_message('global-variable-not-assigned',
658
- args=name, node=node)
659
- default_message = False
660
- if not assign_nodes:
661
- continue
662
- for anode in assign_nodes:
663
- if anode.parent is None:
664
- self.add_message('redefined-builtin', args=name, node=node)
665
- break
666
- if anode.frame() is module:
667
- # module level assignment
668
- break
669
- else:
670
- # global undefined at the module scope
671
- self.add_message('global-variable-undefined', args=name, node=node)
672
- default_message = False
673
- if default_message:
674
- self.add_message('global-statement', node=node)
675
-
676
- def _check_late_binding_closure(self, node, assignment_node):
677
- def _is_direct_lambda_call():
678
- return (isinstance(node_scope.parent, astroid.Call)
679
- and node_scope.parent.func is node_scope)
680
-
681
- node_scope = node.scope()
682
- if not isinstance(node_scope, (astroid.Lambda, astroid.FunctionDef)):
683
- return
684
- if isinstance(node.parent, astroid.Arguments):
685
- return
686
-
687
- if isinstance(assignment_node, astroid.Comprehension):
688
- if assignment_node.parent.parent_of(node.scope()):
689
- self.add_message('cell-var-from-loop', node=node, args=node.name)
690
- else:
691
- assign_scope = assignment_node.scope()
692
- maybe_for = assignment_node
693
- while not isinstance(maybe_for, astroid.For):
694
- if maybe_for is assign_scope:
695
- break
696
- maybe_for = maybe_for.parent
697
- else:
698
- if (maybe_for.parent_of(node_scope)
699
- and not _is_direct_lambda_call()
700
- and not isinstance(node_scope.statement(), astroid.Return)):
701
- self.add_message('cell-var-from-loop', node=node, args=node.name)
702
-
703
- def _loopvar_name(self, node, name):
704
- # filter variables according to node's scope
705
- # XXX used to filter parents but don't remember why, and removing this
706
- # fixes a W0631 false positive reported by Paul Hachmann on 2008/12 on
707
- # python-projects (added to func_use_for_or_listcomp_var test)
708
- #astmts = [stmt for stmt in node.lookup(name)[1]
709
- # if hasattr(stmt, 'ass_type')] and
710
- # not stmt.statement().parent_of(node)]
711
- if not self.linter.is_message_enabled('undefined-loop-variable'):
712
- return
713
- astmts = [stmt for stmt in node.lookup(name)[1]
714
- if hasattr(stmt, 'ass_type')]
715
- # filter variables according their respective scope test is_statement
716
- # and parent to avoid #74747. This is not a total fix, which would
717
- # introduce a mechanism similar to special attribute lookup in
718
- # modules. Also, in order to get correct inference in this case, the
719
- # scope lookup rules would need to be changed to return the initial
720
- # assignment (which does not exist in code per se) as well as any later
721
- # modifications.
722
- if not astmts or (astmts[0].is_statement or astmts[0].parent) \
723
- and astmts[0].statement().parent_of(node):
724
- _astmts = []
725
- else:
726
- _astmts = astmts[:1]
727
- for i, stmt in enumerate(astmts[1:]):
728
- if (astmts[i].statement().parent_of(stmt)
729
- and not in_for_else_branch(astmts[i].statement(), stmt)):
730
- continue
731
- _astmts.append(stmt)
732
- astmts = _astmts
733
- if len(astmts) == 1:
734
- assign = astmts[0].assign_type()
735
- if (isinstance(assign, (astroid.For, astroid.Comprehension,
736
- astroid.GeneratorExp))
737
- and assign.statement() is not node.statement()):
738
- self.add_message('undefined-loop-variable', args=name, node=node)
739
-
740
- @check_messages('redefine-in-handler')
741
- def visit_excepthandler(self, node):
742
- for name in get_all_elements(node.name):
743
- clobbering, args = clobber_in_except(name)
744
- if clobbering:
745
- self.add_message('redefine-in-handler', args=args, node=name)
746
-
747
- def visit_assignname(self, node):
748
- if isinstance(node.assign_type(), astroid.AugAssign):
749
- self.visit_name(node)
750
-
751
- def visit_delname(self, node):
752
- self.visit_name(node)
753
-
754
- @staticmethod
755
- def _defined_in_function_definition(node, frame):
756
- in_annotation_or_default = False
757
- if (isinstance(frame, astroid.FunctionDef) and
758
- node.statement() is frame):
759
- in_annotation_or_default = (
760
- (
761
- PY3K and (node in frame.args.annotations
762
- or node is frame.args.varargannotation
763
- or node is frame.args.kwargannotation)
764
- )
765
- or
766
- frame.args.parent_of(node)
767
- )
768
- return in_annotation_or_default
769
-
770
- @staticmethod
771
- def _next_to_consume(node, name, to_consume):
772
- # mark the name as consumed if it's defined in this scope
773
- found_node = to_consume.get(name)
774
- if (found_node
775
- and isinstance(node.parent, astroid.Assign)
776
- and node.parent == found_node[0].parent):
777
- lhs = found_node[0].parent.targets[0]
778
- if lhs.name == name: # this name is defined in this very statement
779
- found_node = None
780
- return found_node
781
-
782
- @staticmethod
783
- def _is_variable_violation(node, name, defnode, stmt, defstmt,
784
- frame, defframe, base_scope_type,
785
- recursive_klass):
786
- maybee0601 = True
787
- annotation_return = False
788
- if frame is not defframe:
789
- maybee0601 = _detect_global_scope(node, frame, defframe)
790
- elif defframe.parent is None:
791
- # we are at the module level, check the name is not
792
- # defined in builtins
793
- if name in defframe.scope_attrs or astroid.builtin_lookup(name)[1]:
794
- maybee0601 = False
795
- else:
796
- # we are in a local scope, check the name is not
797
- # defined in global or builtin scope
798
- if defframe.root().lookup(name)[1]:
799
- maybee0601 = False
800
- else:
801
- # check if we have a nonlocal
802
- if name in defframe.locals:
803
- maybee0601 = not any(isinstance(child, astroid.Nonlocal)
804
- and name in child.names
805
- for child in defframe.get_children())
806
-
807
- if (base_scope_type == 'lambda' and
808
- isinstance(frame, astroid.ClassDef)
809
- and name in frame.locals):
810
-
811
- # This rule verifies that if the definition node of the
812
- # checked name is an Arguments node and if the name
813
- # is used a default value in the arguments defaults
814
- # and the actual definition of the variable label
815
- # is happening before the Arguments definition.
816
- #
817
- # bar = None
818
- # foo = lambda bar=bar: bar
819
- #
820
- # In this case, maybee0601 should be False, otherwise
821
- # it should be True.
822
- maybee0601 = not (isinstance(defnode, astroid.Arguments) and
823
- node in defnode.defaults and
824
- frame.locals[name][0].fromlineno < defstmt.fromlineno)
825
- elif (isinstance(defframe, astroid.ClassDef) and
826
- isinstance(frame, astroid.FunctionDef)):
827
- # Special rule for function return annotations,
828
- # which uses the same name as the class where
829
- # the function lives.
830
- if (PY3K and node is frame.returns and
831
- defframe.parent_of(frame.returns)):
832
- maybee0601 = annotation_return = True
833
-
834
- if (maybee0601 and defframe.name in defframe.locals and
835
- defframe.locals[name][0].lineno < frame.lineno):
836
- # Detect class assignments with the same
837
- # name as the class. In this case, no warning
838
- # should be raised.
839
- maybee0601 = False
840
- if isinstance(node.parent, astroid.Arguments):
841
- maybee0601 = stmt.fromlineno <= defstmt.fromlineno
842
- elif recursive_klass:
843
- maybee0601 = True
844
- else:
845
- maybee0601 = maybee0601 and stmt.fromlineno <= defstmt.fromlineno
846
- return maybee0601, annotation_return
847
-
848
- def _ignore_class_scope(self, node, name, frame):
849
- # Detect if we are in a local class scope, as an assignment.
850
- # For example, the following is fair game.
851
- #
852
- # class A:
853
- # b = 1
854
- # c = lambda b=b: b * b
855
- #
856
- # class B:
857
- # tp = 1
858
- # def func(self, arg: tp):
859
- # ...
860
- # class C:
861
- # tp = 2
862
- # def func(self, arg=tp):
863
- # ...
864
-
865
- in_annotation_or_default = self._defined_in_function_definition(
866
- node, frame)
867
- if in_annotation_or_default:
868
- frame_locals = frame.parent.scope().locals
869
- else:
870
- frame_locals = frame.locals
871
- return not ((isinstance(frame, astroid.ClassDef) or
872
- in_annotation_or_default) and
873
- name in frame_locals)
874
-
875
- @check_messages(*(MSGS.keys()))
876
- def visit_name(self, node):
877
- """check that a name is defined if the current scope and doesn't
878
- redefine a built-in
879
- """
880
- stmt = node.statement()
881
- if stmt.fromlineno is None:
882
- # name node from a astroid built from live code, skip
883
- assert not stmt.root().file.endswith('.py')
884
- return
885
- name = node.name
886
- frame = stmt.scope()
887
- # if the name node is used as a function default argument's value or as
888
- # a decorator, then start from the parent frame of the function instead
889
- # of the function frame - and thus open an inner class scope
890
- if (is_func_default(node) or is_func_decorator(node)
891
- or is_ancestor_name(frame, node)):
892
- start_index = len(self._to_consume) - 2
893
- else:
894
- start_index = len(self._to_consume) - 1
895
- # iterates through parent scopes, from the inner to the outer
896
- base_scope_type = self._to_consume[start_index][-1]
897
- # pylint: disable=too-many-nested-blocks; refactoring this block is a pain.
898
- for i in range(start_index, -1, -1):
899
- to_consume, consumed, scope_type = self._to_consume[i]
900
- # if the current scope is a class scope but it's not the inner
901
- # scope, ignore it. This prevents to access this scope instead of
902
- # the globals one in function members when there are some common
903
- # names. The only exception is when the starting scope is a
904
- # comprehension and its direct outer scope is a class
905
- if scope_type == 'class' and i != start_index and not (
906
- base_scope_type == 'comprehension' and i == start_index-1):
907
- if self._ignore_class_scope(node, name, frame):
908
- continue
909
-
910
- # the name has already been consumed, only check it's not a loop
911
- # variable used outside the loop
912
- if name in consumed:
913
- defnode = assign_parent(consumed[name][0])
914
- self._check_late_binding_closure(node, defnode)
915
- self._loopvar_name(node, name)
916
- break
917
- found_node = self._next_to_consume(node, name, to_consume)
918
- if found_node:
919
- consumed[name] = found_node
920
- else:
921
- continue
922
- # checks for use before assignment
923
- defnode = assign_parent(to_consume[name][0])
924
- if defnode is not None:
925
- self._check_late_binding_closure(node, defnode)
926
- defstmt = defnode.statement()
927
- defframe = defstmt.frame()
928
- # The class reuses itself in the class scope.
929
- recursive_klass = (frame is defframe and
930
- defframe.parent_of(node) and
931
- isinstance(defframe, astroid.ClassDef) and
932
- node.name == defframe.name)
933
-
934
- maybee0601, annotation_return = self._is_variable_violation(
935
- node, name, defnode, stmt, defstmt,
936
- frame, defframe,
937
- base_scope_type, recursive_klass)
938
-
939
- if (maybee0601
940
- and not is_defined_before(node)
941
- and not astroid.are_exclusive(stmt, defstmt, ('NameError',
942
- 'Exception',
943
- 'BaseException'))):
944
-
945
- # Used and defined in the same place, e.g `x += 1` and `del x`
946
- defined_by_stmt = (
947
- defstmt is stmt
948
- and isinstance(node, (astroid.DelName, astroid.AssignName))
949
- )
950
-
951
- if (recursive_klass
952
- or defined_by_stmt
953
- or annotation_return
954
- or isinstance(defstmt, astroid.Delete)):
955
- if not node_ignores_exception(node, NameError):
956
- self.add_message('undefined-variable', args=name,
957
- node=node)
958
- elif base_scope_type != 'lambda':
959
- # E0601 may *not* occurs in lambda scope.
960
- self.add_message('used-before-assignment', args=name, node=node)
961
- elif base_scope_type == 'lambda':
962
- # E0601 can occur in class-level scope in lambdas, as in
963
- # the following example:
964
- # class A:
965
- # x = lambda attr: f + attr
966
- # f = 42
967
- if isinstance(frame, astroid.ClassDef) and name in frame.locals:
968
- if isinstance(node.parent, astroid.Arguments):
969
- if stmt.fromlineno <= defstmt.fromlineno:
970
- # Doing the following is fine:
971
- # class A:
972
- # x = 42
973
- # y = lambda attr=x: attr
974
- self.add_message('used-before-assignment',
975
- args=name, node=node)
976
- else:
977
- self.add_message('undefined-variable',
978
- args=name, node=node)
979
- elif scope_type == 'lambda':
980
- self.add_message('undefined-variable',
981
- node=node, args=name)
982
-
983
- del to_consume[name]
984
- # check it's not a loop variable used outside the loop
985
- self._loopvar_name(node, name)
986
- break
987
- else:
988
- # we have not found the name, if it isn't a builtin, that's an
989
- # undefined name !
990
- if not (name in astroid.Module.scope_attrs or is_builtin(name)
991
- or name in self.config.additional_builtins):
992
- if not node_ignores_exception(node, NameError):
993
- self.add_message('undefined-variable', args=name, node=node)
994
-
995
- @check_messages('no-name-in-module')
996
- def visit_import(self, node):
997
- """check modules attribute accesses"""
998
- if node_ignores_exception(node, ImportError):
999
- # No need to verify this, since ImportError is already
1000
- # handled by the client code.
1001
- return
1002
-
1003
- for name, _ in node.names:
1004
- parts = name.split('.')
1005
- try:
1006
- module = next(node.infer_name_module(parts[0]))
1007
- except astroid.ResolveError:
1008
- continue
1009
- self._check_module_attrs(node, module, parts[1:])
1010
-
1011
- @check_messages('no-name-in-module')
1012
- def visit_importfrom(self, node):
1013
- """check modules attribute accesses"""
1014
- if node_ignores_exception(node, ImportError):
1015
- # No need to verify this, since ImportError is already
1016
- # handled by the client code.
1017
- return
1018
-
1019
- name_parts = node.modname.split('.')
1020
- try:
1021
- module = node.do_import_module(name_parts[0])
1022
- except Exception:
1023
- return
1024
- module = self._check_module_attrs(node, module, name_parts[1:])
1025
- if not module:
1026
- return
1027
- for name, _ in node.names:
1028
- if name == '*':
1029
- continue
1030
- self._check_module_attrs(node, module, name.split('.'))
1031
-
1032
- @check_messages('unbalanced-tuple-unpacking', 'unpacking-non-sequence')
1033
- def visit_assign(self, node):
1034
- """Check unbalanced tuple unpacking for assignments
1035
- and unpacking non-sequences.
1036
- """
1037
- if not isinstance(node.targets[0], (astroid.Tuple, astroid.List)):
1038
- return
1039
-
1040
- targets = node.targets[0].itered()
1041
- try:
1042
- infered = safe_infer(node.value)
1043
- if infered is not None:
1044
- self._check_unpacking(infered, node, targets)
1045
- except astroid.InferenceError:
1046
- return
1047
-
1048
- def _check_unpacking(self, infered, node, targets):
1049
- """ Check for unbalanced tuple unpacking
1050
- and unpacking non sequences.
1051
- """
1052
- if is_inside_abstract_class(node):
1053
- return
1054
- if is_comprehension(node):
1055
- return
1056
- if infered is astroid.YES:
1057
- return
1058
- if (isinstance(infered.parent, astroid.Arguments) and
1059
- isinstance(node.value, astroid.Name) and
1060
- node.value.name == infered.parent.vararg):
1061
- # Variable-length argument, we can't determine the length.
1062
- return
1063
- if isinstance(infered, (astroid.Tuple, astroid.List)):
1064
- # attempt to check unpacking is properly balanced
1065
- values = infered.itered()
1066
- if len(targets) != len(values):
1067
- # Check if we have starred nodes.
1068
- if any(isinstance(target, astroid.Starred)
1069
- for target in targets):
1070
- return
1071
- self.add_message('unbalanced-tuple-unpacking', node=node,
1072
- args=(_get_unpacking_extra_info(node, infered),
1073
- len(targets),
1074
- len(values)))
1075
- # attempt to check unpacking may be possible (ie RHS is iterable)
1076
- else:
1077
- if not is_iterable(infered):
1078
- self.add_message('unpacking-non-sequence', node=node,
1079
- args=(_get_unpacking_extra_info(node, infered),))
1080
-
1081
-
1082
- def _check_module_attrs(self, node, module, module_names):
1083
- """check that module_names (list of string) are accessible through the
1084
- given module
1085
- if the latest access name corresponds to a module, return it
1086
- """
1087
- assert isinstance(module, astroid.Module), module
1088
- ignored_modules = get_global_option(self, 'ignored-modules',
1089
- default=[])
1090
- while module_names:
1091
- name = module_names.pop(0)
1092
- if name == '__dict__':
1093
- module = None
1094
- break
1095
- try:
1096
- module = next(module.getattr(name)[0].infer())
1097
- if module is astroid.YES:
1098
- return None
1099
- except astroid.NotFoundError:
1100
- if module.name in ignored_modules:
1101
- return None
1102
- self.add_message('no-name-in-module',
1103
- args=(name, module.name), node=node)
1104
- return None
1105
- except astroid.InferenceError:
1106
- return None
1107
- if module_names:
1108
- # FIXME: other message if name is not the latest part of
1109
- # module_names ?
1110
- modname = module and module.name or '__dict__'
1111
- self.add_message('no-name-in-module', node=node,
1112
- args=('.'.join(module_names), modname))
1113
- return None
1114
- if isinstance(module, astroid.Module):
1115
- return module
1116
- return None
1117
-
1118
-
1119
- class VariablesChecker3k(VariablesChecker):
1120
- '''Modified variables checker for 3k'''
1121
- # listcomp have now also their scope
1122
-
1123
- def visit_listcomp(self, node):
1124
- """visit dictcomp: update consumption analysis variable
1125
- """
1126
- self._to_consume.append((copy(node.locals), {}, 'comprehension'))
1127
-
1128
- def leave_listcomp(self, _):
1129
- """leave dictcomp: update consumption analysis variable
1130
- """
1131
- # do not check for not used locals here
1132
- self._to_consume.pop()
1133
-
1134
- def leave_module(self, node):
1135
- """ Update consumption analysis variable
1136
- for metaclasses.
1137
- """
1138
- module_locals = self._to_consume[0][0]
1139
- module_imports = self._to_consume[0][1]
1140
- consumed = {}
1141
-
1142
- for klass in node.nodes_of_class(astroid.ClassDef):
1143
- found = metaclass = name = None
1144
- if not klass._metaclass:
1145
- # Skip if this class doesn't use
1146
- # explictly a metaclass, but inherits it from ancestors
1147
- continue
1148
-
1149
- metaclass = klass.metaclass()
1150
-
1151
- # Look the name in the already found locals.
1152
- # If it's not found there, look in the module locals
1153
- # and in the imported modules.
1154
- if isinstance(klass._metaclass, astroid.Name):
1155
- name = klass._metaclass.name
1156
- elif metaclass:
1157
- # if it uses a `metaclass=module.Class`
1158
- name = metaclass.root().name
1159
-
1160
- if name:
1161
- found = consumed.setdefault(
1162
- name, module_locals.get(name, module_imports.get(name)))
1163
-
1164
- if found is None and not metaclass:
1165
- name = None
1166
- if isinstance(klass._metaclass, astroid.Name):
1167
- name = klass._metaclass.name
1168
- elif isinstance(klass._metaclass, astroid.Attribute):
1169
- name = klass._metaclass.as_string()
1170
-
1171
- if name is not None:
1172
- if not (name in astroid.Module.scope_attrs or
1173
- is_builtin(name) or
1174
- name in self.config.additional_builtins or
1175
- name in node.locals):
1176
- self.add_message('undefined-variable',
1177
- node=klass,
1178
- args=(name, ))
1179
- # Pop the consumed items, in order to
1180
- # avoid having unused-import false positives
1181
- for name in consumed:
1182
- module_locals.pop(name, None)
1183
- super(VariablesChecker3k, self).leave_module(node)
1184
-
1185
- if sys.version_info >= (3, 0):
1186
- VariablesChecker = VariablesChecker3k
1187
-
1188
-
1189
- def register(linter):
1190
- """required method to auto register this checker"""
1191
- linter.register_checker(VariablesChecker(linter))