{"action":"created","comment":{"url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/comments/229470828","pull_request_review_id":169980943,"id":229470828,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyOTQ3MDgyOA==","diff_hunk":"@@ -1,11 +1,440 @@\n # Well-formedness checking\n \n-This chapter is mostly *to be written*. WF checking, in short, has the\n-job of checking that the various declarations in a Rust program are\n-well-formed. This is the basis for implied bounds, and partly for that\n-reason, this checking can be surprisingly subtle! (For example, we\n+WF checking has the job of checking that the various declarations in a Rust\n+program are well-formed. This is the basis for implied bounds, and partly for\n+that reason, this checking can be surprisingly subtle! For example, we\n have to be sure that each impl proves the WF conditions declared on\n-the trait.)\n+the trait.\n \n+For each declaration in a Rust program, we will generate a logical goal and try\n+to prove it using the lowered rules we described in the\n+[lowering rules](./lowering-rules.md) chapter. If we are able to prove it, we\n+say that the construct is well-formed. If not, we report an error to the user.\n \n+Well-formedness checking happens in the [`src/rules/wf.rs`][wf] module in\n+chalk. After you have read this chapter, you may find useful to see an\n+extended set of examples in the [`src/rules/wf/test.rs`][wf_test] submodule.\n \n+The new-style WF checking has not been implemented in rustc yet.\n+\n+[wf]: https://github.com/rust-lang-nursery/chalk/blob/master/src/rules/wf.rs\n+[wf_test]: https://github.com/rust-lang-nursery/chalk/blob/master/src/rules/wf/test.rs\n+\n+We give here a complete reference of the generated goals for each Rust\n+declaration.\n+\n+In addition with the notations introduced in the chapter about\n+lowering rules, we'll introduce another notation: when WF checking a\n+declaration, we'll often have to prove that all types that appear are\n+well-formed, except type parameters that we always assume to be WF. Hence,\n+we'll use the following notation: for a type `SomeType<...>`, we denote\n+`InputTypes(SomeType<...>)` the set of all non-parameter types appearing in\n+`SomeType<...>`, including `SomeType<...>` itself.\n+\n+Examples:\n+* `InputTypes((u32, f32)) = [u32, f32, (u32, f32)]`\n+* `InputTypes(Box<T>) = [Box<T>]`\n+* `InputTypes(Box<Box<T>>) = [Box<T>, Box<Box<T>>]`\n+\n+We may naturally extend the `InputTypes` notation to where clauses, for example\n+`InputTypes(A0: Trait<A1,...,An>)` is the union of `InputTypes(A0)`,\n+`InputTypes(A1)`, ..., `InputTypes(An)`.\n+\n+# Type definitions\n+\n+Given a general type definition:\n+```rust,ignore\n+struct Type<P...> where WC_type {\n+    field1: A1,\n+    ...\n+    fieldn: An,\n+}\n+```\n+\n+we generate the following goal:\n+```text\n+forall<P...> {\n+    if (FromEnv(WC_type)) {\n+        WellFormed(InputTypes(WC_type)) &&\n+            WellFormed(InputTypes(A1)) &&\n+            ...\n+            WellFormed(InputTypes(An))\n+    }\n+}\n+```\n+\n+which in English gives: assuming that the where clauses defined on the type\n+hold, prove that every type appearing in the type definition is well-formed.\n+\n+Some examples:\n+```rust,ignore\n+struct OnlyClone<T> where T: Clone {\n+    clonable: T,\n+}\n+// The only types appearing are type parameters: we have nothing to check,\n+// the type definition is well-formed.\n+```\n+\n+```rust,ignore\n+struct Foo<T> where T: Clone {\n+    foo: OnlyClone<T>,\n+}\n+// The only non-parameter type which appears in this definition is\n+// `OnlyClone<T>`. The generated goal is the following:\n+// ```\n+// forall<T> {\n+//     if (FromEnv(T: Clone)) {\n+//          WellFormed(OnlyClone<T>)\n+//     }\n+// }\n+// ```\n+// which is provable.\n+```\n+\n+```rust,ignore\n+struct Bar<T> where <T as Iterator>::Item: Debug {\n+    bar: i32,\n+}\n+// The only non-parameter types which appear in this definition are\n+// `<T as Iterator>::Item` and `i32`. The generated goal is the following:\n+// ```\n+// forall<T> {\n+//     if (FromEnv(<T as Iterator>::Item: Debug)) {\n+//          WellFormed(<T as Iterator>::Item) &&\n+//               WellFormed(i32)\n+//     }\n+// }\n+// ```\n+// which is not provable since `WellFormed(<T as Iterator>::Item)` requires\n+// proving `Implemented(T: Iterator)`, and we are unable to prove that for an\n+// unknown `T`.\n+//\n+// Hence, this type definition is considered illegal. An additional\n+// `where T: Iterator` would make it legal.\n+```\n+\n+# Trait definitions\n+\n+Given a general trait definition:\n+```rust,ignore\n+trait Trait<P1...> where WC_trait {\n+    type Assoc<P2...>: Bounds_assoc where WC_assoc;\n+}\n+```\n+\n+we generate the following goal:\n+```text\n+forall<P1...> {\n+    if (FromEnv(WC_trait)) {\n+        WellFormed(InputTypes(WC_trait)) &&\n+\n+            forall<P2...> {\n+                if (FromEnv(WC_assoc)) {\n+                    WellFormed(InputTypes(Bounds_assoc)) &&\n+                        WellFormed(InputTypes(WC_assoc))\n+                }\n+            }\n+    }\n+}\n+```\n+\n+There is not much to verify in a trait definition. We just want\n+to prove that the types appearing in the trait definition are well-formed,\n+under the assumption that the different where clauses hold.\n+\n+Some examples:\n+```rust,ignore\n+trait Foo<T> where T: Iterator, <T as Iterator>::Item: Debug {\n+    ...\n+}\n+// The only non-parameter type which appears in this definition is\n+// `<T as Iterator>::Item`. The generated goal is the following:\n+// ```\n+// forall<T> {\n+//     if (FromEnv(T: Iterator), FromEnv(<T as Iterator>::Item: Debug)) {\n+//         WellFormed(<T as Iterator>::Item)\n+//     }\n+// }\n+// ```\n+// which is provable thanks to the `FromEnv(T: Iterator)` assumption.\n+```\n+\n+```rust,ignore\n+trait Bar {\n+    type Assoc<T>: From<<T as Iterator>::Item>;\n+}\n+// The only non-parameter type which appears in this definition is\n+// `<T as Iterator>::Item`. The generated goal is the following:\n+// ```\n+// forall<T> {\n+//     WellFormed(<T as Iterator>::Item)\n+// }\n+// ```\n+// which is not provable, hence the trait definition is considered illegal.\n+```\n+\n+```rust,ignore\n+trait Baz {\n+    type Assoc<T>: From<<T as Iterator>::Item> where T: Iterator;\n+}\n+// The generated goal is now:\n+// ```\n+// forall<T> {\n+//     if (FromEnv(T: Iterator)) {\n+//         WellFormed(<T as Iterator>::Item)\n+//     }\n+// }\n+// ```\n+// which is now provable.\n+```\n+\n+# Impls\n+\n+Now we give ourselves a general impl for the trait defined above:\n+```rust,ignore\n+impl<P1...> Trait<A1...> for SomeType<A2...> where WC_impl {\n+    type Assoc<P2...> = SomeValue<A3...> where WC_assoc;\n+}\n+```\n+\n+Note that here, `WC_assoc` are the same where clauses as those defined on the\n+associated type definition in the trait declaration, *except* that type\n+parameters from the trait are substituted with values provided by the impl\n+(see example below). You cannot add new where clauses. You may omit to write\n+the where clauses if you want to emphasize the fact that you are actually not\n+relying on them.\n+\n+Some examples to illustrate that:\n+```rust,ignore\n+trait Foo<T> {\n+    type Assoc where T: Clone;\n+}","path":"src/traits/wf.md","position":216,"original_position":216,"commit_id":"432728a9a9c4338f7791166ccf5913bb2932e660","original_commit_id":"83652097f3f39c007318939355bf45b3fc6671de","user":{"login":"mark-i-m","id":8827840,"node_id":"MDQ6VXNlcjg4Mjc4NDA=","avatar_url":"https://avatars0.githubusercontent.com/u/8827840?v=4","gravatar_id":"","url":"https://api.github.com/users/mark-i-m","html_url":"https://github.com/mark-i-m","followers_url":"https://api.github.com/users/mark-i-m/followers","following_url":"https://api.github.com/users/mark-i-m/following{/other_user}","gists_url":"https://api.github.com/users/mark-i-m/gists{/gist_id}","starred_url":"https://api.github.com/users/mark-i-m/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mark-i-m/subscriptions","organizations_url":"https://api.github.com/users/mark-i-m/orgs","repos_url":"https://api.github.com/users/mark-i-m/repos","events_url":"https://api.github.com/users/mark-i-m/events{/privacy}","received_events_url":"https://api.github.com/users/mark-i-m/received_events","type":"User","site_admin":false},"body":"Hmm... that does help. I guess my question was more of a GATs question, then. In the `Foo<T>` example, is it possible for the caller to use `T: !Clone`? The bound is on an assoc type, rather than being in `WC_trait`, but it seems to be apply to any use of the trait.","created_at":"2018-10-30T20:20:59Z","updated_at":"2018-10-30T20:21:00Z","html_url":"https://github.com/rust-lang-nursery/rustc-guide/pull/222#discussion_r229470828","pull_request_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/222","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/comments/229470828"},"html":{"href":"https://github.com/rust-lang-nursery/rustc-guide/pull/222#discussion_r229470828"},"pull_request":{"href":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/222"}},"in_reply_to_id":229078277},"pull_request":{"url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/222","id":226602002,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI2NjAyMDAy","html_url":"https://github.com/rust-lang-nursery/rustc-guide/pull/222","diff_url":"https://github.com/rust-lang-nursery/rustc-guide/pull/222.diff","patch_url":"https://github.com/rust-lang-nursery/rustc-guide/pull/222.patch","issue_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/issues/222","number":222,"state":"open","locked":false,"title":"Write well-formedness checking chapter","user":{"login":"scalexm","id":1173131,"node_id":"MDQ6VXNlcjExNzMxMzE=","avatar_url":"https://avatars1.githubusercontent.com/u/1173131?v=4","gravatar_id":"","url":"https://api.github.com/users/scalexm","html_url":"https://github.com/scalexm","followers_url":"https://api.github.com/users/scalexm/followers","following_url":"https://api.github.com/users/scalexm/following{/other_user}","gists_url":"https://api.github.com/users/scalexm/gists{/gist_id}","starred_url":"https://api.github.com/users/scalexm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalexm/subscriptions","organizations_url":"https://api.github.com/users/scalexm/orgs","repos_url":"https://api.github.com/users/scalexm/repos","events_url":"https://api.github.com/users/scalexm/events{/privacy}","received_events_url":"https://api.github.com/users/scalexm/received_events","type":"User","site_admin":false},"body":"This covers types, traits and trait impls.\r\n\r\ncc @nikomatsakis @tmandry ","created_at":"2018-10-29T15:21:03Z","updated_at":"2018-10-30T20:21:00Z","closed_at":null,"merged_at":null,"merge_commit_sha":"60146dceabaa8b6feca761566637015b519f340e","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/222/commits","review_comments_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/222/comments","review_comment_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/issues/222/comments","statuses_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/statuses/432728a9a9c4338f7791166ccf5913bb2932e660","head":{"label":"scalexm:wf","ref":"wf","sha":"432728a9a9c4338f7791166ccf5913bb2932e660","user":{"login":"scalexm","id":1173131,"node_id":"MDQ6VXNlcjExNzMxMzE=","avatar_url":"https://avatars1.githubusercontent.com/u/1173131?v=4","gravatar_id":"","url":"https://api.github.com/users/scalexm","html_url":"https://github.com/scalexm","followers_url":"https://api.github.com/users/scalexm/followers","following_url":"https://api.github.com/users/scalexm/following{/other_user}","gists_url":"https://api.github.com/users/scalexm/gists{/gist_id}","starred_url":"https://api.github.com/users/scalexm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalexm/subscriptions","organizations_url":"https://api.github.com/users/scalexm/orgs","repos_url":"https://api.github.com/users/scalexm/repos","events_url":"https://api.github.com/users/scalexm/events{/privacy}","received_events_url":"https://api.github.com/users/scalexm/received_events","type":"User","site_admin":false},"repo":{"id":136452343,"node_id":"MDEwOlJlcG9zaXRvcnkxMzY0NTIzNDM=","name":"rustc-guide","full_name":"scalexm/rustc-guide","private":false,"owner":{"login":"scalexm","id":1173131,"node_id":"MDQ6VXNlcjExNzMxMzE=","avatar_url":"https://avatars1.githubusercontent.com/u/1173131?v=4","gravatar_id":"","url":"https://api.github.com/users/scalexm","html_url":"https://github.com/scalexm","followers_url":"https://api.github.com/users/scalexm/followers","following_url":"https://api.github.com/users/scalexm/following{/other_user}","gists_url":"https://api.github.com/users/scalexm/gists{/gist_id}","starred_url":"https://api.github.com/users/scalexm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalexm/subscriptions","organizations_url":"https://api.github.com/users/scalexm/orgs","repos_url":"https://api.github.com/users/scalexm/repos","events_url":"https://api.github.com/users/scalexm/events{/privacy}","received_events_url":"https://api.github.com/users/scalexm/received_events","type":"User","site_admin":false},"html_url":"https://github.com/scalexm/rustc-guide","description":"A guide to how rustc works and how to contribute to it.","fork":true,"url":"https://api.github.com/repos/scalexm/rustc-guide","forks_url":"https://api.github.com/repos/scalexm/rustc-guide/forks","keys_url":"https://api.github.com/repos/scalexm/rustc-guide/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scalexm/rustc-guide/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scalexm/rustc-guide/teams","hooks_url":"https://api.github.com/repos/scalexm/rustc-guide/hooks","issue_events_url":"https://api.github.com/repos/scalexm/rustc-guide/issues/events{/number}","events_url":"https://api.github.com/repos/scalexm/rustc-guide/events","assignees_url":"https://api.github.com/repos/scalexm/rustc-guide/assignees{/user}","branches_url":"https://api.github.com/repos/scalexm/rustc-guide/branches{/branch}","tags_url":"https://api.github.com/repos/scalexm/rustc-guide/tags","blobs_url":"https://api.github.com/repos/scalexm/rustc-guide/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scalexm/rustc-guide/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scalexm/rustc-guide/git/refs{/sha}","trees_url":"https://api.github.com/repos/scalexm/rustc-guide/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scalexm/rustc-guide/statuses/{sha}","languages_url":"https://api.github.com/repos/scalexm/rustc-guide/languages","stargazers_url":"https://api.github.com/repos/scalexm/rustc-guide/stargazers","contributors_url":"https://api.github.com/repos/scalexm/rustc-guide/contributors","subscribers_url":"https://api.github.com/repos/scalexm/rustc-guide/subscribers","subscription_url":"https://api.github.com/repos/scalexm/rustc-guide/subscription","commits_url":"https://api.github.com/repos/scalexm/rustc-guide/commits{/sha}","git_commits_url":"https://api.github.com/repos/scalexm/rustc-guide/git/commits{/sha}","comments_url":"https://api.github.com/repos/scalexm/rustc-guide/comments{/number}","issue_comment_url":"https://api.github.com/repos/scalexm/rustc-guide/issues/comments{/number}","contents_url":"https://api.github.com/repos/scalexm/rustc-guide/contents/{+path}","compare_url":"https://api.github.com/repos/scalexm/rustc-guide/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scalexm/rustc-guide/merges","archive_url":"https://api.github.com/repos/scalexm/rustc-guide/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scalexm/rustc-guide/downloads","issues_url":"https://api.github.com/repos/scalexm/rustc-guide/issues{/number}","pulls_url":"https://api.github.com/repos/scalexm/rustc-guide/pulls{/number}","milestones_url":"https://api.github.com/repos/scalexm/rustc-guide/milestones{/number}","notifications_url":"https://api.github.com/repos/scalexm/rustc-guide/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scalexm/rustc-guide/labels{/name}","releases_url":"https://api.github.com/repos/scalexm/rustc-guide/releases{/id}","deployments_url":"https://api.github.com/repos/scalexm/rustc-guide/deployments","created_at":"2018-06-07T09:13:05Z","updated_at":"2018-10-25T16:17:41Z","pushed_at":"2018-10-30T20:06:14Z","git_url":"git://github.com/scalexm/rustc-guide.git","ssh_url":"git@github.com:scalexm/rustc-guide.git","clone_url":"https://github.com/scalexm/rustc-guide.git","svn_url":"https://github.com/scalexm/rustc-guide","homepage":"https://rust-lang-nursery.github.io/rustc-guide/","size":1723,"stargazers_count":0,"watchers_count":0,"language":"Shell","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"rust-lang-nursery:master","ref":"master","sha":"34af41dddb22bcdb594de0ccb9296ac459398b78","user":{"login":"rust-lang-nursery","id":14631425,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0NjMxNDI1","avatar_url":"https://avatars1.githubusercontent.com/u/14631425?v=4","gravatar_id":"","url":"https://api.github.com/users/rust-lang-nursery","html_url":"https://github.com/rust-lang-nursery","followers_url":"https://api.github.com/users/rust-lang-nursery/followers","following_url":"https://api.github.com/users/rust-lang-nursery/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang-nursery/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang-nursery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang-nursery/subscriptions","organizations_url":"https://api.github.com/users/rust-lang-nursery/orgs","repos_url":"https://api.github.com/users/rust-lang-nursery/repos","events_url":"https://api.github.com/users/rust-lang-nursery/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang-nursery/received_events","type":"Organization","site_admin":false},"repo":{"id":117744230,"node_id":"MDEwOlJlcG9zaXRvcnkxMTc3NDQyMzA=","name":"rustc-guide","full_name":"rust-lang-nursery/rustc-guide","private":false,"owner":{"login":"rust-lang-nursery","id":14631425,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0NjMxNDI1","avatar_url":"https://avatars1.githubusercontent.com/u/14631425?v=4","gravatar_id":"","url":"https://api.github.com/users/rust-lang-nursery","html_url":"https://github.com/rust-lang-nursery","followers_url":"https://api.github.com/users/rust-lang-nursery/followers","following_url":"https://api.github.com/users/rust-lang-nursery/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang-nursery/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang-nursery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang-nursery/subscriptions","organizations_url":"https://api.github.com/users/rust-lang-nursery/orgs","repos_url":"https://api.github.com/users/rust-lang-nursery/repos","events_url":"https://api.github.com/users/rust-lang-nursery/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang-nursery/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/rust-lang-nursery/rustc-guide","description":"A guide to how rustc works and how to contribute to it.","fork":false,"url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide","forks_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/forks","keys_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/teams","hooks_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/hooks","issue_events_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/issues/events{/number}","events_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/events","assignees_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/assignees{/user}","branches_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/branches{/branch}","tags_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/tags","blobs_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/git/refs{/sha}","trees_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/statuses/{sha}","languages_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/languages","stargazers_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/stargazers","contributors_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/contributors","subscribers_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/subscribers","subscription_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/subscription","commits_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/commits{/sha}","git_commits_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/git/commits{/sha}","comments_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/comments{/number}","issue_comment_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/issues/comments{/number}","contents_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/contents/{+path}","compare_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/merges","archive_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/downloads","issues_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/issues{/number}","pulls_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls{/number}","milestones_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/milestones{/number}","notifications_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/labels{/name}","releases_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/releases{/id}","deployments_url":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/deployments","created_at":"2018-01-16T21:26:54Z","updated_at":"2018-10-30T17:17:17Z","pushed_at":"2018-10-30T20:06:15Z","git_url":"git://github.com/rust-lang-nursery/rustc-guide.git","ssh_url":"git@github.com:rust-lang-nursery/rustc-guide.git","clone_url":"https://github.com/rust-lang-nursery/rustc-guide.git","svn_url":"https://github.com/rust-lang-nursery/rustc-guide","homepage":"https://rust-lang-nursery.github.io/rustc-guide/","size":1717,"stargazers_count":257,"watchers_count":257,"language":"Shell","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":49,"mirror_url":null,"archived":false,"open_issues_count":47,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":49,"open_issues":47,"watchers":257,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/222"},"html":{"href":"https://github.com/rust-lang-nursery/rustc-guide/pull/222"},"issue":{"href":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/issues/222"},"comments":{"href":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/issues/222/comments"},"review_comments":{"href":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/222/comments"},"review_comment":{"href":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/pulls/222/commits"},"statuses":{"href":"https://api.github.com/repos/rust-lang-nursery/rustc-guide/statuses/432728a9a9c4338f7791166ccf5913bb2932e660"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"mark-i-m"}}