{"action":"created","issue":{"url":"https://api.github.com/repos/rust-lang/rfcs/issues/1566","repository_url":"https://api.github.com/repos/rust-lang/rfcs","labels_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1566/labels{/name}","comments_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1566/comments","events_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1566/events","html_url":"https://github.com/rust-lang/rfcs/pull/1566","id":145130115,"number":1566,"title":"Procedural macros","user":{"login":"nrc","id":762626,"avatar_url":"https://avatars.githubusercontent.com/u/762626?v=3","gravatar_id":"","url":"https://api.github.com/users/nrc","html_url":"https://github.com/nrc","followers_url":"https://api.github.com/users/nrc/followers","following_url":"https://api.github.com/users/nrc/following{/other_user}","gists_url":"https://api.github.com/users/nrc/gists{/gist_id}","starred_url":"https://api.github.com/users/nrc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nrc/subscriptions","organizations_url":"https://api.github.com/users/nrc/orgs","repos_url":"https://api.github.com/users/nrc/repos","events_url":"https://api.github.com/users/nrc/events{/privacy}","received_events_url":"https://api.github.com/users/nrc/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/rust-lang/rfcs/labels/T-compiler","name":"T-compiler","color":"bfd4f2"},{"url":"https://api.github.com/repos/rust-lang/rfcs/labels/T-lang","name":"T-lang","color":"bfd4f2"}],"state":"open","locked":false,"assignee":{"login":"nrc","id":762626,"avatar_url":"https://avatars.githubusercontent.com/u/762626?v=3","gravatar_id":"","url":"https://api.github.com/users/nrc","html_url":"https://github.com/nrc","followers_url":"https://api.github.com/users/nrc/followers","following_url":"https://api.github.com/users/nrc/following{/other_user}","gists_url":"https://api.github.com/users/nrc/gists{/gist_id}","starred_url":"https://api.github.com/users/nrc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nrc/subscriptions","organizations_url":"https://api.github.com/users/nrc/orgs","repos_url":"https://api.github.com/users/nrc/repos","events_url":"https://api.github.com/users/nrc/events{/privacy}","received_events_url":"https://api.github.com/users/nrc/received_events","type":"User","site_admin":false},"milestone":null,"comments":31,"created_at":"2016-04-01T09:16:43Z","updated_at":"2016-04-19T20:58:23Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1566","html_url":"https://github.com/rust-lang/rfcs/pull/1566","diff_url":"https://github.com/rust-lang/rfcs/pull/1566.diff","patch_url":"https://github.com/rust-lang/rfcs/pull/1566.patch"},"body":"This RFC proposes an evolution of Rust's procedural macro system (aka syntax\r\nextensions, aka compiler plugins). This RFC specifies syntax for the definition\r\nof procedural macros, a high-level view of their implementation in the compiler,\r\nand outlines how they interact with the compilation process.\r\n\r\nAt the highest level, macros are defined by implementing functions marked with\r\na `#[macro]` attribute. Macros operate on a list of tokens provided by the\r\ncompiler and return a list of tokens that the macro use is replaced by. We\r\nprovide low-level facilities for operating on these tokens. Higher level\r\nfacilities (e.g., for parsing tokens to an AST) should exist as library crates."},"comment":{"url":"https://api.github.com/repos/rust-lang/rfcs/issues/comments/212126200","html_url":"https://github.com/rust-lang/rfcs/pull/1566#issuecomment-212126200","issue_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1566","id":212126200,"user":{"login":"eddyb","id":77424,"avatar_url":"https://avatars.githubusercontent.com/u/77424?v=3","gravatar_id":"","url":"https://api.github.com/users/eddyb","html_url":"https://github.com/eddyb","followers_url":"https://api.github.com/users/eddyb/followers","following_url":"https://api.github.com/users/eddyb/following{/other_user}","gists_url":"https://api.github.com/users/eddyb/gists{/gist_id}","starred_url":"https://api.github.com/users/eddyb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eddyb/subscriptions","organizations_url":"https://api.github.com/users/eddyb/orgs","repos_url":"https://api.github.com/users/eddyb/repos","events_url":"https://api.github.com/users/eddyb/events{/privacy}","received_events_url":"https://api.github.com/users/eddyb/received_events","type":"User","site_admin":false},"created_at":"2016-04-19T20:58:23Z","updated_at":"2016-04-19T20:58:23Z","body":"@paulstansifer Well, the point is to keep the minimal amount of code for the public stable API in `libmacro`, and have the rest in `libsyntax`.\r\nHowever, if the latter ends up small enough (i.e. `libmacro` includes the whole parser for some reason), it might get fused to the rest of the compiler."}}