]>
git.proxmox.com Git - rustc.git/blob - src/libsyntax_ext/cmdline_attrs.rs
1 //! Attributes injected into the crate root from command line using `-Z crate-attr`.
3 use syntax
::ast
::{self, AttrStyle}
;
4 use syntax
::attr
::mk_attr
;
6 use syntax
::parse
::{self, token, ParseSess}
;
7 use syntax_pos
::FileName
;
9 pub fn inject(mut krate
: ast
::Crate
, parse_sess
: &ParseSess
, attrs
: &[String
]) -> ast
::Crate
{
10 for raw_attr
in attrs
{
11 let mut parser
= parse
::new_parser_from_source_str(
13 FileName
::cli_crate_attr_source_code(&raw_attr
),
17 let start_span
= parser
.token
.span
;
18 let (path
, tokens
) = panictry
!(parser
.parse_meta_item_unrestricted());
19 let end_span
= parser
.token
.span
;
20 if parser
.token
!= token
::Eof
{
21 parse_sess
.span_diagnostic
22 .span_err(start_span
.to(end_span
), "invalid crate attribute");
26 krate
.attrs
.push(mk_attr(AttrStyle
::Inner
, path
, tokens
, start_span
.to(end_span
)));