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