{"action":"created","issue":{"url":"https://api.github.com/repos/python-trio/trio/issues/730","repository_url":"https://api.github.com/repos/python-trio/trio","labels_url":"https://api.github.com/repos/python-trio/trio/issues/730/labels{/name}","comments_url":"https://api.github.com/repos/python-trio/trio/issues/730/comments","events_url":"https://api.github.com/repos/python-trio/trio/issues/730/events","html_url":"https://github.com/python-trio/trio/pull/730","id":369214032,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIyMjA5NzAx","number":730,"title":"Added typechecking block for static analysis tools","user":{"login":"jmfrank63","id":3090462,"node_id":"MDQ6VXNlcjMwOTA0NjI=","avatar_url":"https://avatars3.githubusercontent.com/u/3090462?v=4","gravatar_id":"","url":"https://api.github.com/users/jmfrank63","html_url":"https://github.com/jmfrank63","followers_url":"https://api.github.com/users/jmfrank63/followers","following_url":"https://api.github.com/users/jmfrank63/following{/other_user}","gists_url":"https://api.github.com/users/jmfrank63/gists{/gist_id}","starred_url":"https://api.github.com/users/jmfrank63/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jmfrank63/subscriptions","organizations_url":"https://api.github.com/users/jmfrank63/orgs","repos_url":"https://api.github.com/users/jmfrank63/repos","events_url":"https://api.github.com/users/jmfrank63/events{/privacy}","received_events_url":"https://api.github.com/users/jmfrank63/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":14,"created_at":"2018-10-11T16:55:29Z","updated_at":"2018-10-15T01:19:44Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/python-trio/trio/pulls/730","html_url":"https://github.com/python-trio/trio/pull/730","diff_url":"https://github.com/python-trio/trio/pull/730.diff","patch_url":"https://github.com/python-trio/trio/pull/730.patch"},"body":""},"comment":{"url":"https://api.github.com/repos/python-trio/trio/issues/comments/429681139","html_url":"https://github.com/python-trio/trio/pull/730#issuecomment-429681139","issue_url":"https://api.github.com/repos/python-trio/trio/issues/730","id":429681139,"node_id":"MDEyOklzc3VlQ29tbWVudDQyOTY4MTEzOQ==","user":{"login":"njsmith","id":609896,"node_id":"MDQ6VXNlcjYwOTg5Ng==","avatar_url":"https://avatars0.githubusercontent.com/u/609896?v=4","gravatar_id":"","url":"https://api.github.com/users/njsmith","html_url":"https://github.com/njsmith","followers_url":"https://api.github.com/users/njsmith/followers","following_url":"https://api.github.com/users/njsmith/following{/other_user}","gists_url":"https://api.github.com/users/njsmith/gists{/gist_id}","starred_url":"https://api.github.com/users/njsmith/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/njsmith/subscriptions","organizations_url":"https://api.github.com/users/njsmith/orgs","repos_url":"https://api.github.com/users/njsmith/repos","events_url":"https://api.github.com/users/njsmith/events{/privacy}","received_events_url":"https://api.github.com/users/njsmith/received_events","type":"User","site_admin":false},"created_at":"2018-10-15T01:19:44Z","updated_at":"2018-10-15T01:19:44Z","author_association":"MEMBER","body":"Yeah, codecov is a bit mysterious until you get used to it... the most reliable way I know to figure out what's going on with a PR is:\r\n\r\n1. Click the \"Continue to review full report at Codecov\" link\r\n1. Click on the \"Files\" tab (not anything else! You would think \"diff\" or \"changes\" are relevant, but they are just there to confuse you)\r\n1. In the \"files\" tab, there's a tabular view of the source tree, with columns labeled \"green dot\", \"yellow dot\", \"red dot\". The numbers in those columns show you how many lines the PR caused to become covered (green), partially covered (yellow) or uncovered (red). I look for \"+\" entries in the yellow/red columns, and drill down through the source tree to find the individual files. In this case, I click on \"trio\", and then \"tests\", and then \"test_exports.py\".\r\n1. Now I'm looking at [the actual file](https://codecov.io/gh/python-trio/trio/pull/730/src/trio/tests/test_exports.py?before=trio/tests/test_exports.py). At the top there is a message saying \"Awesome! No coverage changes found when comparing this file.\" I don't know why codecov says this, because it is a blatant lie – we just got here because codecov said there were coverage changes in this file.\r\n1. Scroll through the file looking for red/yellow lines. Here there are two sets of red lines, both of which look like:\r\n\r\n```python\r\nexcept NotImplementedError:  # pragma : no cover\r\n        pytest.skip(\"jedi does not yet support {}\".format(sys.version))\r\n```\r\n\r\nSo... those are the lines that codecov is complaining about being uncovered. What's going on? It's not a surprise that those lines didn't get executed... it just means jedi didn't raise `NotImplementedError` in any of the configurations we currently test. But we have this `pragma` here that's supposed to tell coverage.py that we don't care about those lines. Yet they're still being reporting as uncovered, so our pragma isn't working.\r\n\r\nThe problem is that coverage.py's check for the pragma is very simple, and just does a literal string match. It's looking for `# pragma: no cover`, but here we have `# pragma : no cover` with an extra space before the colon, so it doesn't match\r\n\r\nSolution: remove extra space before the colon, in both of the places where it happens :-)"}}
{"actor":{"display_login":"njsmith"}}