{"action":"closed","number":1903,"pull_request":{"url":"https://api.github.com/repos/ocaml/ocaml/pulls/1903","id":201470085,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAxNDcwMDg1","html_url":"https://github.com/ocaml/ocaml/pull/1903","diff_url":"https://github.com/ocaml/ocaml/pull/1903.diff","patch_url":"https://github.com/ocaml/ocaml/pull/1903.patch","issue_url":"https://api.github.com/repos/ocaml/ocaml/issues/1903","number":1903,"state":"closed","locked":false,"title":"Parsetree, typedtree: add locations to all nodes carrying attributes","user":{"login":"gasche","id":426238,"node_id":"MDQ6VXNlcjQyNjIzOA==","avatar_url":"https://avatars2.githubusercontent.com/u/426238?v=4","gravatar_id":"","url":"https://api.github.com/users/gasche","html_url":"https://github.com/gasche","followers_url":"https://api.github.com/users/gasche/followers","following_url":"https://api.github.com/users/gasche/following{/other_user}","gists_url":"https://api.github.com/users/gasche/gists{/gist_id}","starred_url":"https://api.github.com/users/gasche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gasche/subscriptions","organizations_url":"https://api.github.com/users/gasche/orgs","repos_url":"https://api.github.com/users/gasche/repos","events_url":"https://api.github.com/users/gasche/events{/privacy}","received_events_url":"https://api.github.com/users/gasche/received_events","type":"User","site_admin":false},"body":"Currently, there are nodes in the AST that carry attributes, but don't store their own location. This is a problem for various kind of preprocessing where one would want to have access to the locations of the nodes concerned by a particular attribute.\r\n\r\nWe ran into this issue with @Octachron when trying to add an `[@ellipsis]` attribute to elide parts of a program for the manual examples (#1765).\r\n\r\nThis PR changes the parsetree and typedtree definitions, so it will break third-party consumers of those. I tried to keep the changes relatively minimal. (In particular, I started with a version that put `Rtag` and `Otag` payloads into records, but that proved too invasive and I went for a simpler approach here.)","created_at":"2018-07-14T21:34:05Z","updated_at":"2018-08-22T14:56:30Z","closed_at":"2018-08-22T14:56:29Z","merged_at":"2018-08-22T14:56:29Z","merge_commit_sha":"4a95b0b777af441ad35152e4085b10cfc0249fd7","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/ocaml/ocaml/pulls/1903/commits","review_comments_url":"https://api.github.com/repos/ocaml/ocaml/pulls/1903/comments","review_comment_url":"https://api.github.com/repos/ocaml/ocaml/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ocaml/ocaml/issues/1903/comments","statuses_url":"https://api.github.com/repos/ocaml/ocaml/statuses/e348103ab8f234ca71cc7980d7ce656f2f26ef1b","head":{"label":"gasche:add-locations-to-all-attributed-nodes","ref":"add-locations-to-all-attributed-nodes","sha":"e348103ab8f234ca71cc7980d7ce656f2f26ef1b","user":{"login":"gasche","id":426238,"node_id":"MDQ6VXNlcjQyNjIzOA==","avatar_url":"https://avatars2.githubusercontent.com/u/426238?v=4","gravatar_id":"","url":"https://api.github.com/users/gasche","html_url":"https://github.com/gasche","followers_url":"https://api.github.com/users/gasche/followers","following_url":"https://api.github.com/users/gasche/following{/other_user}","gists_url":"https://api.github.com/users/gasche/gists{/gist_id}","starred_url":"https://api.github.com/users/gasche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gasche/subscriptions","organizations_url":"https://api.github.com/users/gasche/orgs","repos_url":"https://api.github.com/users/gasche/repos","events_url":"https://api.github.com/users/gasche/events{/privacy}","received_events_url":"https://api.github.com/users/gasche/received_events","type":"User","site_admin":false},"repo":{"id":18431480,"node_id":"MDEwOlJlcG9zaXRvcnkxODQzMTQ4MA==","name":"ocaml","full_name":"gasche/ocaml","owner":{"login":"gasche","id":426238,"node_id":"MDQ6VXNlcjQyNjIzOA==","avatar_url":"https://avatars2.githubusercontent.com/u/426238?v=4","gravatar_id":"","url":"https://api.github.com/users/gasche","html_url":"https://github.com/gasche","followers_url":"https://api.github.com/users/gasche/followers","following_url":"https://api.github.com/users/gasche/following{/other_user}","gists_url":"https://api.github.com/users/gasche/gists{/gist_id}","starred_url":"https://api.github.com/users/gasche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gasche/subscriptions","organizations_url":"https://api.github.com/users/gasche/orgs","repos_url":"https://api.github.com/users/gasche/repos","events_url":"https://api.github.com/users/gasche/events{/privacy}","received_events_url":"https://api.github.com/users/gasche/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/gasche/ocaml","description":" The core OCaml system: compilers, runtime system, base libraries ","fork":true,"url":"https://api.github.com/repos/gasche/ocaml","forks_url":"https://api.github.com/repos/gasche/ocaml/forks","keys_url":"https://api.github.com/repos/gasche/ocaml/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gasche/ocaml/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gasche/ocaml/teams","hooks_url":"https://api.github.com/repos/gasche/ocaml/hooks","issue_events_url":"https://api.github.com/repos/gasche/ocaml/issues/events{/number}","events_url":"https://api.github.com/repos/gasche/ocaml/events","assignees_url":"https://api.github.com/repos/gasche/ocaml/assignees{/user}","branches_url":"https://api.github.com/repos/gasche/ocaml/branches{/branch}","tags_url":"https://api.github.com/repos/gasche/ocaml/tags","blobs_url":"https://api.github.com/repos/gasche/ocaml/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gasche/ocaml/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gasche/ocaml/git/refs{/sha}","trees_url":"https://api.github.com/repos/gasche/ocaml/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gasche/ocaml/statuses/{sha}","languages_url":"https://api.github.com/repos/gasche/ocaml/languages","stargazers_url":"https://api.github.com/repos/gasche/ocaml/stargazers","contributors_url":"https://api.github.com/repos/gasche/ocaml/contributors","subscribers_url":"https://api.github.com/repos/gasche/ocaml/subscribers","subscription_url":"https://api.github.com/repos/gasche/ocaml/subscription","commits_url":"https://api.github.com/repos/gasche/ocaml/commits{/sha}","git_commits_url":"https://api.github.com/repos/gasche/ocaml/git/commits{/sha}","comments_url":"https://api.github.com/repos/gasche/ocaml/comments{/number}","issue_comment_url":"https://api.github.com/repos/gasche/ocaml/issues/comments{/number}","contents_url":"https://api.github.com/repos/gasche/ocaml/contents/{+path}","compare_url":"https://api.github.com/repos/gasche/ocaml/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gasche/ocaml/merges","archive_url":"https://api.github.com/repos/gasche/ocaml/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gasche/ocaml/downloads","issues_url":"https://api.github.com/repos/gasche/ocaml/issues{/number}","pulls_url":"https://api.github.com/repos/gasche/ocaml/pulls{/number}","milestones_url":"https://api.github.com/repos/gasche/ocaml/milestones{/number}","notifications_url":"https://api.github.com/repos/gasche/ocaml/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gasche/ocaml/labels{/name}","releases_url":"https://api.github.com/repos/gasche/ocaml/releases{/id}","deployments_url":"https://api.github.com/repos/gasche/ocaml/deployments","created_at":"2014-04-04T07:49:39Z","updated_at":"2018-07-01T15:08:19Z","pushed_at":"2018-08-21T20:17:32Z","git_url":"git://github.com/gasche/ocaml.git","ssh_url":"git@github.com:gasche/ocaml.git","clone_url":"https://github.com/gasche/ocaml.git","svn_url":"https://github.com/gasche/ocaml","homepage":"","size":194664,"stargazers_count":0,"watchers_count":0,"language":"OCaml","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"trunk"}},"base":{"label":"ocaml:trunk","ref":"trunk","sha":"4d3088cdbe5ceea0fd03bb29c3d4856e8ed995d8","user":{"login":"ocaml","id":1841483,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE4NDE0ODM=","avatar_url":"https://avatars3.githubusercontent.com/u/1841483?v=4","gravatar_id":"","url":"https://api.github.com/users/ocaml","html_url":"https://github.com/ocaml","followers_url":"https://api.github.com/users/ocaml/followers","following_url":"https://api.github.com/users/ocaml/following{/other_user}","gists_url":"https://api.github.com/users/ocaml/gists{/gist_id}","starred_url":"https://api.github.com/users/ocaml/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ocaml/subscriptions","organizations_url":"https://api.github.com/users/ocaml/orgs","repos_url":"https://api.github.com/users/ocaml/repos","events_url":"https://api.github.com/users/ocaml/events{/privacy}","received_events_url":"https://api.github.com/users/ocaml/received_events","type":"Organization","site_admin":false},"repo":{"id":6786166,"node_id":"MDEwOlJlcG9zaXRvcnk2Nzg2MTY2","name":"ocaml","full_name":"ocaml/ocaml","owner":{"login":"ocaml","id":1841483,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE4NDE0ODM=","avatar_url":"https://avatars3.githubusercontent.com/u/1841483?v=4","gravatar_id":"","url":"https://api.github.com/users/ocaml","html_url":"https://github.com/ocaml","followers_url":"https://api.github.com/users/ocaml/followers","following_url":"https://api.github.com/users/ocaml/following{/other_user}","gists_url":"https://api.github.com/users/ocaml/gists{/gist_id}","starred_url":"https://api.github.com/users/ocaml/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ocaml/subscriptions","organizations_url":"https://api.github.com/users/ocaml/orgs","repos_url":"https://api.github.com/users/ocaml/repos","events_url":"https://api.github.com/users/ocaml/events{/privacy}","received_events_url":"https://api.github.com/users/ocaml/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ocaml/ocaml","description":"The core OCaml system: compilers, runtime system, base libraries","fork":false,"url":"https://api.github.com/repos/ocaml/ocaml","forks_url":"https://api.github.com/repos/ocaml/ocaml/forks","keys_url":"https://api.github.com/repos/ocaml/ocaml/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ocaml/ocaml/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ocaml/ocaml/teams","hooks_url":"https://api.github.com/repos/ocaml/ocaml/hooks","issue_events_url":"https://api.github.com/repos/ocaml/ocaml/issues/events{/number}","events_url":"https://api.github.com/repos/ocaml/ocaml/events","assignees_url":"https://api.github.com/repos/ocaml/ocaml/assignees{/user}","branches_url":"https://api.github.com/repos/ocaml/ocaml/branches{/branch}","tags_url":"https://api.github.com/repos/ocaml/ocaml/tags","blobs_url":"https://api.github.com/repos/ocaml/ocaml/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ocaml/ocaml/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ocaml/ocaml/git/refs{/sha}","trees_url":"https://api.github.com/repos/ocaml/ocaml/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ocaml/ocaml/statuses/{sha}","languages_url":"https://api.github.com/repos/ocaml/ocaml/languages","stargazers_url":"https://api.github.com/repos/ocaml/ocaml/stargazers","contributors_url":"https://api.github.com/repos/ocaml/ocaml/contributors","subscribers_url":"https://api.github.com/repos/ocaml/ocaml/subscribers","subscription_url":"https://api.github.com/repos/ocaml/ocaml/subscription","commits_url":"https://api.github.com/repos/ocaml/ocaml/commits{/sha}","git_commits_url":"https://api.github.com/repos/ocaml/ocaml/git/commits{/sha}","comments_url":"https://api.github.com/repos/ocaml/ocaml/comments{/number}","issue_comment_url":"https://api.github.com/repos/ocaml/ocaml/issues/comments{/number}","contents_url":"https://api.github.com/repos/ocaml/ocaml/contents/{+path}","compare_url":"https://api.github.com/repos/ocaml/ocaml/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ocaml/ocaml/merges","archive_url":"https://api.github.com/repos/ocaml/ocaml/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ocaml/ocaml/downloads","issues_url":"https://api.github.com/repos/ocaml/ocaml/issues{/number}","pulls_url":"https://api.github.com/repos/ocaml/ocaml/pulls{/number}","milestones_url":"https://api.github.com/repos/ocaml/ocaml/milestones{/number}","notifications_url":"https://api.github.com/repos/ocaml/ocaml/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ocaml/ocaml/labels{/name}","releases_url":"https://api.github.com/repos/ocaml/ocaml/releases{/id}","deployments_url":"https://api.github.com/repos/ocaml/ocaml/deployments","created_at":"2012-11-20T22:18:22Z","updated_at":"2018-08-22T14:55:56Z","pushed_at":"2018-08-22T14:56:29Z","git_url":"git://github.com/ocaml/ocaml.git","ssh_url":"git@github.com:ocaml/ocaml.git","clone_url":"https://github.com/ocaml/ocaml.git","svn_url":"https://github.com/ocaml/ocaml","homepage":"","size":175547,"stargazers_count":1939,"watchers_count":1939,"language":"OCaml","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":477,"mirror_url":null,"archived":false,"open_issues_count":176,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":477,"open_issues":176,"watchers":1939,"default_branch":"trunk"}},"_links":{"self":{"href":"https://api.github.com/repos/ocaml/ocaml/pulls/1903"},"html":{"href":"https://github.com/ocaml/ocaml/pull/1903"},"issue":{"href":"https://api.github.com/repos/ocaml/ocaml/issues/1903"},"comments":{"href":"https://api.github.com/repos/ocaml/ocaml/issues/1903/comments"},"review_comments":{"href":"https://api.github.com/repos/ocaml/ocaml/pulls/1903/comments"},"review_comment":{"href":"https://api.github.com/repos/ocaml/ocaml/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ocaml/ocaml/pulls/1903/commits"},"statuses":{"href":"https://api.github.com/repos/ocaml/ocaml/statuses/e348103ab8f234ca71cc7980d7ce656f2f26ef1b"}},"author_association":"MEMBER","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"gasche","id":426238,"node_id":"MDQ6VXNlcjQyNjIzOA==","avatar_url":"https://avatars2.githubusercontent.com/u/426238?v=4","gravatar_id":"","url":"https://api.github.com/users/gasche","html_url":"https://github.com/gasche","followers_url":"https://api.github.com/users/gasche/followers","following_url":"https://api.github.com/users/gasche/following{/other_user}","gists_url":"https://api.github.com/users/gasche/gists{/gist_id}","starred_url":"https://api.github.com/users/gasche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gasche/subscriptions","organizations_url":"https://api.github.com/users/gasche/orgs","repos_url":"https://api.github.com/users/gasche/repos","events_url":"https://api.github.com/users/gasche/events{/privacy}","received_events_url":"https://api.github.com/users/gasche/received_events","type":"User","site_admin":false},"comments":20,"review_comments":0,"maintainer_can_modify":false,"commits":3,"additions":388,"deletions":157,"changed_files":23}}
{"actor":{"display_login":"gasche"}}