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