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
@@ -0,0 +1,44 @@
|
|
1
|
+
"""Astroid hooks for the PyQT library."""
|
2
|
+
|
3
|
+
from astroid import MANAGER, register_module_extender
|
4
|
+
from astroid.builder import AstroidBuilder
|
5
|
+
from astroid import nodes
|
6
|
+
from astroid import parse
|
7
|
+
|
8
|
+
|
9
|
+
def _looks_like_signal(node, signal_name='pyqtSignal'):
|
10
|
+
if '__class__' in node._instance_attrs:
|
11
|
+
cls = node._instance_attrs['__class__'][0]
|
12
|
+
return cls.name == signal_name
|
13
|
+
return False
|
14
|
+
|
15
|
+
|
16
|
+
def transform_pyqt_signal(node):
|
17
|
+
module = parse('''
|
18
|
+
class pyqtSignal(object):
|
19
|
+
def connect(self, slot, type=None, no_receiver_check=False):
|
20
|
+
pass
|
21
|
+
def disconnect(self, slot):
|
22
|
+
pass
|
23
|
+
def emit(self, *args):
|
24
|
+
pass
|
25
|
+
''')
|
26
|
+
signal_cls = module['pyqtSignal']
|
27
|
+
node._instance_attrs['emit'] = signal_cls['emit']
|
28
|
+
node._instance_attrs['disconnect'] = signal_cls['disconnect']
|
29
|
+
node._instance_attrs['connect'] = signal_cls['connect']
|
30
|
+
|
31
|
+
|
32
|
+
def pyqt4_qtcore_transform():
|
33
|
+
return AstroidBuilder(MANAGER).string_build('''
|
34
|
+
|
35
|
+
def SIGNAL(signal_name): pass
|
36
|
+
|
37
|
+
class QObject(object):
|
38
|
+
def emit(self, signal): pass
|
39
|
+
''')
|
40
|
+
|
41
|
+
|
42
|
+
register_module_extender(MANAGER, 'PyQt4.QtCore', pyqt4_qtcore_transform)
|
43
|
+
MANAGER.register_transform(nodes.FunctionDef, transform_pyqt_signal,
|
44
|
+
_looks_like_signal)
|
@@ -23,7 +23,12 @@ from textwrap import dedent
|
|
23
23
|
|
24
24
|
from astroid import MANAGER, register_module_extender
|
25
25
|
from astroid.builder import AstroidBuilder
|
26
|
-
from astroid.exceptions import AstroidBuildingException
|
26
|
+
from astroid.exceptions import AstroidBuildingException, InferenceError
|
27
|
+
from astroid import nodes
|
28
|
+
|
29
|
+
|
30
|
+
SIX_ADD_METACLASS = 'six.add_metaclass'
|
31
|
+
|
27
32
|
|
28
33
|
def _indent(text, prefix, predicate=None):
|
29
34
|
"""Adds 'prefix' to the beginning of selected lines in 'text'.
|
@@ -254,8 +259,30 @@ def _six_fail_hook(modname):
|
|
254
259
|
module.name = 'six.moves'
|
255
260
|
return module
|
256
261
|
|
262
|
+
def transform_six_add_metaclass(node):
|
263
|
+
"""Check if the given class node is decorated with *six.add_metaclass*
|
264
|
+
|
265
|
+
If so, inject its argument as the metaclass of the underlying class.
|
266
|
+
"""
|
267
|
+
if not node.decorators:
|
268
|
+
return
|
269
|
+
|
270
|
+
for decorator in node.decorators.nodes:
|
271
|
+
if not isinstance(decorator, nodes.Call):
|
272
|
+
continue
|
273
|
+
|
274
|
+
try:
|
275
|
+
func = next(decorator.func.infer())
|
276
|
+
except InferenceError:
|
277
|
+
continue
|
278
|
+
if func.qname() == SIX_ADD_METACLASS and decorator.args:
|
279
|
+
metaclass = decorator.args[0]
|
280
|
+
node._metaclass = metaclass
|
281
|
+
return node
|
282
|
+
|
257
283
|
|
258
284
|
register_module_extender(MANAGER, 'six', six_moves_transform)
|
259
285
|
register_module_extender(MANAGER, 'requests.packages.urllib3.packages.six',
|
260
286
|
six_moves_transform)
|
261
287
|
MANAGER.register_failed_import_hook(_six_fail_hook)
|
288
|
+
MANAGER.register_transform(nodes.ClassDef, transform_six_add_metaclass)
|
@@ -0,0 +1,65 @@
|
|
1
|
+
"""Astroid hooks for the ssl library."""
|
2
|
+
|
3
|
+
from astroid import MANAGER, register_module_extender
|
4
|
+
from astroid.builder import AstroidBuilder
|
5
|
+
from astroid import nodes
|
6
|
+
from astroid import parse
|
7
|
+
|
8
|
+
|
9
|
+
def ssl_transform():
|
10
|
+
return parse('''
|
11
|
+
from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION
|
12
|
+
from _ssl import _SSLContext, MemoryBIO
|
13
|
+
from _ssl import (
|
14
|
+
SSLError, SSLZeroReturnError, SSLWantReadError, SSLWantWriteError,
|
15
|
+
SSLSyscallError, SSLEOFError,
|
16
|
+
)
|
17
|
+
from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED
|
18
|
+
from _ssl import txt2obj as _txt2obj, nid2obj as _nid2obj
|
19
|
+
from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes
|
20
|
+
try:
|
21
|
+
from _ssl import RAND_egd
|
22
|
+
except ImportError:
|
23
|
+
# LibreSSL does not provide RAND_egd
|
24
|
+
pass
|
25
|
+
from _ssl import (OP_ALL, OP_CIPHER_SERVER_PREFERENCE,
|
26
|
+
OP_NO_COMPRESSION, OP_NO_SSLv2, OP_NO_SSLv3,
|
27
|
+
OP_NO_TLSv1, OP_NO_TLSv1_1, OP_NO_TLSv1_2,
|
28
|
+
OP_SINGLE_DH_USE, OP_SINGLE_ECDH_USE)
|
29
|
+
|
30
|
+
from _ssl import (ALERT_DESCRIPTION_ACCESS_DENIED, ALERT_DESCRIPTION_BAD_CERTIFICATE,
|
31
|
+
ALERT_DESCRIPTION_BAD_CERTIFICATE_HASH_VALUE,
|
32
|
+
ALERT_DESCRIPTION_BAD_CERTIFICATE_STATUS_RESPONSE,
|
33
|
+
ALERT_DESCRIPTION_BAD_RECORD_MAC,
|
34
|
+
ALERT_DESCRIPTION_CERTIFICATE_EXPIRED,
|
35
|
+
ALERT_DESCRIPTION_CERTIFICATE_REVOKED,
|
36
|
+
ALERT_DESCRIPTION_CERTIFICATE_UNKNOWN,
|
37
|
+
ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE,
|
38
|
+
ALERT_DESCRIPTION_CLOSE_NOTIFY, ALERT_DESCRIPTION_DECODE_ERROR,
|
39
|
+
ALERT_DESCRIPTION_DECOMPRESSION_FAILURE,
|
40
|
+
ALERT_DESCRIPTION_DECRYPT_ERROR,
|
41
|
+
ALERT_DESCRIPTION_HANDSHAKE_FAILURE,
|
42
|
+
ALERT_DESCRIPTION_ILLEGAL_PARAMETER,
|
43
|
+
ALERT_DESCRIPTION_INSUFFICIENT_SECURITY,
|
44
|
+
ALERT_DESCRIPTION_INTERNAL_ERROR,
|
45
|
+
ALERT_DESCRIPTION_NO_RENEGOTIATION,
|
46
|
+
ALERT_DESCRIPTION_PROTOCOL_VERSION,
|
47
|
+
ALERT_DESCRIPTION_RECORD_OVERFLOW,
|
48
|
+
ALERT_DESCRIPTION_UNEXPECTED_MESSAGE,
|
49
|
+
ALERT_DESCRIPTION_UNKNOWN_CA,
|
50
|
+
ALERT_DESCRIPTION_UNKNOWN_PSK_IDENTITY,
|
51
|
+
ALERT_DESCRIPTION_UNRECOGNIZED_NAME,
|
52
|
+
ALERT_DESCRIPTION_UNSUPPORTED_CERTIFICATE,
|
53
|
+
ALERT_DESCRIPTION_UNSUPPORTED_EXTENSION,
|
54
|
+
ALERT_DESCRIPTION_USER_CANCELLED)
|
55
|
+
from _ssl import (SSL_ERROR_EOF, SSL_ERROR_INVALID_ERROR_CODE, SSL_ERROR_SSL,
|
56
|
+
SSL_ERROR_SYSCALL, SSL_ERROR_WANT_CONNECT, SSL_ERROR_WANT_READ,
|
57
|
+
SSL_ERROR_WANT_WRITE, SSL_ERROR_WANT_X509_LOOKUP, SSL_ERROR_ZERO_RETURN)
|
58
|
+
from _ssl import VERIFY_CRL_CHECK_CHAIN, VERIFY_CRL_CHECK_LEAF, VERIFY_DEFAULT, VERIFY_X509_STRICT
|
59
|
+
from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN
|
60
|
+
from _ssl import _OPENSSL_API_VERSION
|
61
|
+
from _ssl import PROTOCOL_SSLv23, PROTOCOL_TLSv1, PROTOCOL_TLSv1_1, PROTOCOL_TLSv1_2
|
62
|
+
''')
|
63
|
+
|
64
|
+
|
65
|
+
register_module_extender(MANAGER, 'ssl', ssl_transform)
|
@@ -0,0 +1,473 @@
|
|
1
|
+
|
2
|
+
"""Astroid hooks for the Python 2 standard library.
|
3
|
+
|
4
|
+
Currently help understanding of :
|
5
|
+
|
6
|
+
* hashlib.md5 and hashlib.sha1
|
7
|
+
"""
|
8
|
+
|
9
|
+
import functools
|
10
|
+
import sys
|
11
|
+
from textwrap import dedent
|
12
|
+
|
13
|
+
from astroid import (
|
14
|
+
MANAGER, UseInferenceDefault, inference_tip, BoundMethod,
|
15
|
+
InferenceError, register_module_extender)
|
16
|
+
from astroid import exceptions
|
17
|
+
from astroid import nodes
|
18
|
+
from astroid.builder import AstroidBuilder
|
19
|
+
from astroid import util
|
20
|
+
from astroid import test_utils
|
21
|
+
|
22
|
+
PY3K = sys.version_info > (3, 0)
|
23
|
+
PY33 = sys.version_info >= (3, 3)
|
24
|
+
PY34 = sys.version_info >= (3, 4)
|
25
|
+
|
26
|
+
# general function
|
27
|
+
|
28
|
+
def infer_func_form(node, base_type, context=None, enum=False):
|
29
|
+
"""Specific inference function for namedtuple or Python 3 enum. """
|
30
|
+
def infer_first(node):
|
31
|
+
if node is util.YES:
|
32
|
+
raise UseInferenceDefault
|
33
|
+
try:
|
34
|
+
value = next(node.infer(context=context))
|
35
|
+
if value is util.YES:
|
36
|
+
raise UseInferenceDefault()
|
37
|
+
else:
|
38
|
+
return value
|
39
|
+
except StopIteration:
|
40
|
+
raise InferenceError()
|
41
|
+
|
42
|
+
# node is a Call node, class name as first argument and generated class
|
43
|
+
# attributes as second argument
|
44
|
+
if len(node.args) != 2:
|
45
|
+
# something weird here, go back to class implementation
|
46
|
+
raise UseInferenceDefault()
|
47
|
+
# namedtuple or enums list of attributes can be a list of strings or a
|
48
|
+
# whitespace-separate string
|
49
|
+
try:
|
50
|
+
name = infer_first(node.args[0]).value
|
51
|
+
names = infer_first(node.args[1])
|
52
|
+
try:
|
53
|
+
attributes = names.value.replace(',', ' ').split()
|
54
|
+
except AttributeError:
|
55
|
+
if not enum:
|
56
|
+
attributes = [infer_first(const).value for const in names.elts]
|
57
|
+
else:
|
58
|
+
# Enums supports either iterator of (name, value) pairs
|
59
|
+
# or mappings.
|
60
|
+
# TODO: support only list, tuples and mappings.
|
61
|
+
if hasattr(names, 'items') and isinstance(names.items, list):
|
62
|
+
attributes = [infer_first(const[0]).value
|
63
|
+
for const in names.items
|
64
|
+
if isinstance(const[0], nodes.Const)]
|
65
|
+
elif hasattr(names, 'elts'):
|
66
|
+
# Enums can support either ["a", "b", "c"]
|
67
|
+
# or [("a", 1), ("b", 2), ...], but they can't
|
68
|
+
# be mixed.
|
69
|
+
if all(isinstance(const, nodes.Tuple)
|
70
|
+
for const in names.elts):
|
71
|
+
attributes = [infer_first(const.elts[0]).value
|
72
|
+
for const in names.elts
|
73
|
+
if isinstance(const, nodes.Tuple)]
|
74
|
+
else:
|
75
|
+
attributes = [infer_first(const).value
|
76
|
+
for const in names.elts]
|
77
|
+
else:
|
78
|
+
raise AttributeError
|
79
|
+
if not attributes:
|
80
|
+
raise AttributeError
|
81
|
+
except (AttributeError, exceptions.InferenceError):
|
82
|
+
raise UseInferenceDefault()
|
83
|
+
|
84
|
+
# If we can't iner the name of the class, don't crash, up to this point
|
85
|
+
# we know it is a namedtuple anyway.
|
86
|
+
name = name or 'Uninferable'
|
87
|
+
# we want to return a Class node instance with proper attributes set
|
88
|
+
class_node = nodes.ClassDef(name, 'docstring')
|
89
|
+
class_node.parent = node.parent
|
90
|
+
# set base class=tuple
|
91
|
+
class_node.bases.append(base_type)
|
92
|
+
# XXX add __init__(*attributes) method
|
93
|
+
for attr in attributes:
|
94
|
+
fake_node = nodes.EmptyNode()
|
95
|
+
fake_node.parent = class_node
|
96
|
+
fake_node.attrname = attr
|
97
|
+
class_node._instance_attrs[attr] = [fake_node]
|
98
|
+
return class_node, name, attributes
|
99
|
+
|
100
|
+
|
101
|
+
# module specific transformation functions #####################################
|
102
|
+
|
103
|
+
def hashlib_transform():
|
104
|
+
template = '''
|
105
|
+
|
106
|
+
class %(name)s(object):
|
107
|
+
def __init__(self, value=''): pass
|
108
|
+
def digest(self):
|
109
|
+
return %(digest)s
|
110
|
+
def copy(self):
|
111
|
+
return self
|
112
|
+
def update(self, value): pass
|
113
|
+
def hexdigest(self):
|
114
|
+
return ''
|
115
|
+
@property
|
116
|
+
def name(self):
|
117
|
+
return %(name)r
|
118
|
+
@property
|
119
|
+
def block_size(self):
|
120
|
+
return 1
|
121
|
+
@property
|
122
|
+
def digest_size(self):
|
123
|
+
return 1
|
124
|
+
'''
|
125
|
+
algorithms = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')
|
126
|
+
classes = "".join(
|
127
|
+
template % {'name': hashfunc, 'digest': 'b""' if PY3K else '""'}
|
128
|
+
for hashfunc in algorithms)
|
129
|
+
return AstroidBuilder(MANAGER).string_build(classes)
|
130
|
+
|
131
|
+
|
132
|
+
def collections_transform():
|
133
|
+
return AstroidBuilder(MANAGER).string_build('''
|
134
|
+
|
135
|
+
class defaultdict(dict):
|
136
|
+
default_factory = None
|
137
|
+
def __missing__(self, key): pass
|
138
|
+
|
139
|
+
class deque(object):
|
140
|
+
maxlen = 0
|
141
|
+
def __init__(self, iterable=None, maxlen=None):
|
142
|
+
self.iterable = iterable
|
143
|
+
def append(self, x): pass
|
144
|
+
def appendleft(self, x): pass
|
145
|
+
def clear(self): pass
|
146
|
+
def count(self, x): return 0
|
147
|
+
def extend(self, iterable): pass
|
148
|
+
def extendleft(self, iterable): pass
|
149
|
+
def pop(self): pass
|
150
|
+
def popleft(self): pass
|
151
|
+
def remove(self, value): pass
|
152
|
+
def reverse(self): pass
|
153
|
+
def rotate(self, n): pass
|
154
|
+
def __iter__(self): return self
|
155
|
+
def __reversed__(self): return self.iterable[::-1]
|
156
|
+
def __getitem__(self, index): pass
|
157
|
+
def __setitem__(self, index, value): pass
|
158
|
+
def __delitem__(self, index): pass
|
159
|
+
''')
|
160
|
+
|
161
|
+
|
162
|
+
def pkg_resources_transform():
|
163
|
+
return AstroidBuilder(MANAGER).string_build('''
|
164
|
+
def require(*requirements):
|
165
|
+
return pkg_resources.working_set.require(*requirements)
|
166
|
+
|
167
|
+
def run_script(requires, script_name):
|
168
|
+
return pkg_resources.working_set.run_script(requires, script_name)
|
169
|
+
|
170
|
+
def iter_entry_points(group, name=None):
|
171
|
+
return pkg_resources.working_set.iter_entry_points(group, name)
|
172
|
+
|
173
|
+
def resource_exists(package_or_requirement, resource_name):
|
174
|
+
return get_provider(package_or_requirement).has_resource(resource_name)
|
175
|
+
|
176
|
+
def resource_isdir(package_or_requirement, resource_name):
|
177
|
+
return get_provider(package_or_requirement).resource_isdir(
|
178
|
+
resource_name)
|
179
|
+
|
180
|
+
def resource_filename(package_or_requirement, resource_name):
|
181
|
+
return get_provider(package_or_requirement).get_resource_filename(
|
182
|
+
self, resource_name)
|
183
|
+
|
184
|
+
def resource_stream(package_or_requirement, resource_name):
|
185
|
+
return get_provider(package_or_requirement).get_resource_stream(
|
186
|
+
self, resource_name)
|
187
|
+
|
188
|
+
def resource_string(package_or_requirement, resource_name):
|
189
|
+
return get_provider(package_or_requirement).get_resource_string(
|
190
|
+
self, resource_name)
|
191
|
+
|
192
|
+
def resource_listdir(package_or_requirement, resource_name):
|
193
|
+
return get_provider(package_or_requirement).resource_listdir(
|
194
|
+
resource_name)
|
195
|
+
|
196
|
+
def extraction_error():
|
197
|
+
pass
|
198
|
+
|
199
|
+
def get_cache_path(archive_name, names=()):
|
200
|
+
extract_path = self.extraction_path or get_default_cache()
|
201
|
+
target_path = os.path.join(extract_path, archive_name+'-tmp', *names)
|
202
|
+
return target_path
|
203
|
+
|
204
|
+
def postprocess(tempname, filename):
|
205
|
+
pass
|
206
|
+
|
207
|
+
def set_extraction_path(path):
|
208
|
+
pass
|
209
|
+
|
210
|
+
def cleanup_resources(force=False):
|
211
|
+
pass
|
212
|
+
|
213
|
+
''')
|
214
|
+
|
215
|
+
|
216
|
+
def subprocess_transform():
|
217
|
+
if PY3K:
|
218
|
+
communicate = (bytes('string', 'ascii'), bytes('string', 'ascii'))
|
219
|
+
communicate_signature = 'def communicate(self, input=None, timeout=None)'
|
220
|
+
init = """
|
221
|
+
def __init__(self, args, bufsize=0, executable=None,
|
222
|
+
stdin=None, stdout=None, stderr=None,
|
223
|
+
preexec_fn=None, close_fds=False, shell=False,
|
224
|
+
cwd=None, env=None, universal_newlines=False,
|
225
|
+
startupinfo=None, creationflags=0, restore_signals=True,
|
226
|
+
start_new_session=False, pass_fds=()):
|
227
|
+
pass
|
228
|
+
"""
|
229
|
+
else:
|
230
|
+
communicate = ('string', 'string')
|
231
|
+
communicate_signature = 'def communicate(self, input=None)'
|
232
|
+
init = """
|
233
|
+
def __init__(self, args, bufsize=0, executable=None,
|
234
|
+
stdin=None, stdout=None, stderr=None,
|
235
|
+
preexec_fn=None, close_fds=False, shell=False,
|
236
|
+
cwd=None, env=None, universal_newlines=False,
|
237
|
+
startupinfo=None, creationflags=0):
|
238
|
+
pass
|
239
|
+
"""
|
240
|
+
if PY33:
|
241
|
+
wait_signature = 'def wait(self, timeout=None)'
|
242
|
+
else:
|
243
|
+
wait_signature = 'def wait(self)'
|
244
|
+
if PY3K:
|
245
|
+
ctx_manager = '''
|
246
|
+
def __enter__(self): return self
|
247
|
+
def __exit__(self, *args): pass
|
248
|
+
'''
|
249
|
+
else:
|
250
|
+
ctx_manager = ''
|
251
|
+
code = dedent('''
|
252
|
+
|
253
|
+
class Popen(object):
|
254
|
+
returncode = pid = 0
|
255
|
+
stdin = stdout = stderr = file()
|
256
|
+
|
257
|
+
%(init)s
|
258
|
+
|
259
|
+
%(communicate_signature)s:
|
260
|
+
return %(communicate)r
|
261
|
+
%(wait_signature)s:
|
262
|
+
return self.returncode
|
263
|
+
def poll(self):
|
264
|
+
return self.returncode
|
265
|
+
def send_signal(self, signal):
|
266
|
+
pass
|
267
|
+
def terminate(self):
|
268
|
+
pass
|
269
|
+
def kill(self):
|
270
|
+
pass
|
271
|
+
%(ctx_manager)s
|
272
|
+
''' % {'init': init,
|
273
|
+
'communicate': communicate,
|
274
|
+
'communicate_signature': communicate_signature,
|
275
|
+
'wait_signature': wait_signature,
|
276
|
+
'ctx_manager': ctx_manager})
|
277
|
+
return AstroidBuilder(MANAGER).string_build(code)
|
278
|
+
|
279
|
+
|
280
|
+
# namedtuple support ###########################################################
|
281
|
+
|
282
|
+
def _looks_like(node, name):
|
283
|
+
func = node.func
|
284
|
+
if isinstance(func, nodes.Attribute):
|
285
|
+
return func.attrname == name
|
286
|
+
if isinstance(func, nodes.Name):
|
287
|
+
return func.name == name
|
288
|
+
return False
|
289
|
+
|
290
|
+
_looks_like_namedtuple = functools.partial(_looks_like, name='namedtuple')
|
291
|
+
_looks_like_enum = functools.partial(_looks_like, name='Enum')
|
292
|
+
|
293
|
+
|
294
|
+
def infer_named_tuple(node, context=None):
|
295
|
+
"""Specific inference function for namedtuple Call node"""
|
296
|
+
class_node, name, attributes = infer_func_form(node, nodes.Tuple._proxied,
|
297
|
+
context=context)
|
298
|
+
fake = AstroidBuilder(MANAGER).string_build('''
|
299
|
+
class %(name)s(tuple):
|
300
|
+
_fields = %(fields)r
|
301
|
+
def _asdict(self):
|
302
|
+
return self.__dict__
|
303
|
+
@classmethod
|
304
|
+
def _make(cls, iterable, new=tuple.__new__, len=len):
|
305
|
+
return new(cls, iterable)
|
306
|
+
def _replace(self, **kwds):
|
307
|
+
return self
|
308
|
+
''' % {'name': name, 'fields': attributes})
|
309
|
+
class_node._locals['_asdict'] = fake.body[0]._locals['_asdict']
|
310
|
+
class_node._locals['_make'] = fake.body[0]._locals['_make']
|
311
|
+
class_node._locals['_replace'] = fake.body[0]._locals['_replace']
|
312
|
+
class_node._locals['_fields'] = fake.body[0]._locals['_fields']
|
313
|
+
# we use UseInferenceDefault, we can't be a generator so return an iterator
|
314
|
+
return iter([class_node])
|
315
|
+
|
316
|
+
|
317
|
+
def infer_enum(node, context=None):
|
318
|
+
""" Specific inference function for enum Call node. """
|
319
|
+
enum_meta = test_utils.extract_node('''
|
320
|
+
class EnumMeta(object):
|
321
|
+
'docstring'
|
322
|
+
def __call__(self, node):
|
323
|
+
class EnumAttribute(object):
|
324
|
+
name = ''
|
325
|
+
value = 0
|
326
|
+
return EnumAttribute()
|
327
|
+
''')
|
328
|
+
class_node = infer_func_form(node, enum_meta,
|
329
|
+
context=context, enum=True)[0]
|
330
|
+
return iter([class_node.instantiate_class()])
|
331
|
+
|
332
|
+
|
333
|
+
def infer_enum_class(node):
|
334
|
+
""" Specific inference for enums. """
|
335
|
+
names = set(('Enum', 'IntEnum', 'enum.Enum', 'enum.IntEnum'))
|
336
|
+
for basename in node.basenames:
|
337
|
+
# TODO: doesn't handle subclasses yet. This implementation
|
338
|
+
# is a hack to support enums.
|
339
|
+
if basename not in names:
|
340
|
+
continue
|
341
|
+
if node.root().name == 'enum':
|
342
|
+
# Skip if the class is directly from enum module.
|
343
|
+
break
|
344
|
+
for local, values in node._locals.items():
|
345
|
+
if any(not isinstance(value, nodes.AssignName)
|
346
|
+
for value in values):
|
347
|
+
continue
|
348
|
+
|
349
|
+
stmt = values[0].statement()
|
350
|
+
if isinstance(stmt.targets[0], nodes.Tuple):
|
351
|
+
targets = stmt.targets[0].itered()
|
352
|
+
else:
|
353
|
+
targets = stmt.targets
|
354
|
+
|
355
|
+
new_targets = []
|
356
|
+
for target in targets:
|
357
|
+
# Replace all the assignments with our mocked class.
|
358
|
+
classdef = dedent('''
|
359
|
+
class %(name)s(%(types)s):
|
360
|
+
@property
|
361
|
+
def value(self):
|
362
|
+
# Not the best return.
|
363
|
+
return None
|
364
|
+
@property
|
365
|
+
def name(self):
|
366
|
+
return %(name)r
|
367
|
+
''' % {'name': target.name, 'types': ', '.join(node.basenames)})
|
368
|
+
fake = AstroidBuilder(MANAGER).string_build(classdef)[target.name]
|
369
|
+
fake.parent = target.parent
|
370
|
+
for method in node.mymethods():
|
371
|
+
fake._locals[method.name] = [method]
|
372
|
+
new_targets.append(fake.instantiate_class())
|
373
|
+
node._locals[local] = new_targets
|
374
|
+
break
|
375
|
+
return node
|
376
|
+
|
377
|
+
def multiprocessing_transform():
|
378
|
+
module = AstroidBuilder(MANAGER).string_build(dedent('''
|
379
|
+
from multiprocessing.managers import SyncManager
|
380
|
+
def Manager():
|
381
|
+
return SyncManager()
|
382
|
+
'''))
|
383
|
+
if not PY34:
|
384
|
+
return module
|
385
|
+
|
386
|
+
# On Python 3.4, multiprocessing uses a getattr lookup inside contexts,
|
387
|
+
# in order to get the attributes they need. Since it's extremely
|
388
|
+
# dynamic, we use this approach to fake it.
|
389
|
+
node = AstroidBuilder(MANAGER).string_build(dedent('''
|
390
|
+
from multiprocessing.context import DefaultContext, BaseContext
|
391
|
+
default = DefaultContext()
|
392
|
+
base = BaseContext()
|
393
|
+
'''))
|
394
|
+
try:
|
395
|
+
context = next(node['default'].infer())
|
396
|
+
base = next(node['base'].infer())
|
397
|
+
except InferenceError:
|
398
|
+
return module
|
399
|
+
|
400
|
+
for node in (context, base):
|
401
|
+
for key, value in node._locals.items():
|
402
|
+
if key.startswith("_"):
|
403
|
+
continue
|
404
|
+
|
405
|
+
value = value[0]
|
406
|
+
if isinstance(value, nodes.FunctionDef):
|
407
|
+
# We need to rebound this, since otherwise
|
408
|
+
# it will have an extra argument (self).
|
409
|
+
value = BoundMethod(value, node)
|
410
|
+
module[key] = value
|
411
|
+
return module
|
412
|
+
|
413
|
+
def multiprocessing_managers_transform():
|
414
|
+
return AstroidBuilder(MANAGER).string_build(dedent('''
|
415
|
+
import array
|
416
|
+
import threading
|
417
|
+
import multiprocessing.pool as pool
|
418
|
+
|
419
|
+
import six
|
420
|
+
|
421
|
+
class Namespace(object):
|
422
|
+
pass
|
423
|
+
|
424
|
+
class Value(object):
|
425
|
+
def __init__(self, typecode, value, lock=True):
|
426
|
+
self._typecode = typecode
|
427
|
+
self._value = value
|
428
|
+
def get(self):
|
429
|
+
return self._value
|
430
|
+
def set(self, value):
|
431
|
+
self._value = value
|
432
|
+
def __repr__(self):
|
433
|
+
return '%s(%r, %r)'%(type(self).__name__, self._typecode, self._value)
|
434
|
+
value = property(get, set)
|
435
|
+
|
436
|
+
def Array(typecode, sequence, lock=True):
|
437
|
+
return array.array(typecode, sequence)
|
438
|
+
|
439
|
+
class SyncManager(object):
|
440
|
+
Queue = JoinableQueue = six.moves.queue.Queue
|
441
|
+
Event = threading.Event
|
442
|
+
RLock = threading.RLock
|
443
|
+
BoundedSemaphore = threading.BoundedSemaphore
|
444
|
+
Condition = threading.Condition
|
445
|
+
Barrier = threading.Barrier
|
446
|
+
Pool = pool.Pool
|
447
|
+
list = list
|
448
|
+
dict = dict
|
449
|
+
Value = Value
|
450
|
+
Array = Array
|
451
|
+
Namespace = Namespace
|
452
|
+
__enter__ = lambda self: self
|
453
|
+
__exit__ = lambda *args: args
|
454
|
+
|
455
|
+
def start(self, initializer=None, initargs=None):
|
456
|
+
pass
|
457
|
+
def shutdown(self):
|
458
|
+
pass
|
459
|
+
'''))
|
460
|
+
|
461
|
+
|
462
|
+
MANAGER.register_transform(nodes.Call, inference_tip(infer_named_tuple),
|
463
|
+
_looks_like_namedtuple)
|
464
|
+
MANAGER.register_transform(nodes.Call, inference_tip(infer_enum),
|
465
|
+
_looks_like_enum)
|
466
|
+
MANAGER.register_transform(nodes.ClassDef, infer_enum_class)
|
467
|
+
register_module_extender(MANAGER, 'hashlib', hashlib_transform)
|
468
|
+
register_module_extender(MANAGER, 'collections', collections_transform)
|
469
|
+
register_module_extender(MANAGER, 'pkg_resources', pkg_resources_transform)
|
470
|
+
register_module_extender(MANAGER, 'subprocess', subprocess_transform)
|
471
|
+
register_module_extender(MANAGER, 'multiprocessing.managers',
|
472
|
+
multiprocessing_managers_transform)
|
473
|
+
register_module_extender(MANAGER, 'multiprocessing', multiprocessing_transform)
|