Skip to content

Commit d24c66f

Browse files
authored
Rollup merge of rust-lang#65376 - Centril:syntax-extractions-1, r=petrochenkov
syntax: misc extractions Part of rust-lang#65324. r? @petrochenkov
2 parents 19d4e2f + ae156a5 commit d24c66f

38 files changed

+406
-389
lines changed

src/librustc/hir/lowering.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ use syntax::errors;
6767
use syntax::ext::base::SpecialDerives;
6868
use syntax::ext::hygiene::ExpnId;
6969
use syntax::print::pprust;
70-
use syntax::source_map::{respan, ExpnData, ExpnKind, DesugaringKind, Spanned};
71-
use syntax::symbol::{kw, sym, Symbol};
7270
use syntax::tokenstream::{TokenStream, TokenTree};
7371
use syntax::parse::token::{self, Nonterminal, Token};
74-
use syntax::parse::ParseSess;
72+
use syntax::sess::ParseSess;
73+
use syntax::source_map::{respan, ExpnData, ExpnKind, DesugaringKind, Spanned};
74+
use syntax::symbol::{kw, sym, Symbol};
7575
use syntax::visit::{self, Visitor};
7676
use syntax_pos::Span;
7777

src/librustc/hir/print.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use rustc_target::spec::abi::Abi;
22
use syntax::ast;
33
use syntax::source_map::{SourceMap, Spanned};
4-
use syntax::parse::ParseSess;
54
use syntax::print::pp::{self, Breaks};
65
use syntax::print::pp::Breaks::{Consistent, Inconsistent};
76
use syntax::print::pprust::{self, Comments, PrintState};
7+
use syntax::sess::ParseSess;
88
use syntax::symbol::kw;
99
use syntax::util::parser::{self, AssocOp, Fixity};
1010
use syntax_pos::{self, BytePos, FileName};

src/librustc/session/config.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ use syntax;
1616
use syntax::ast::{self, IntTy, UintTy, MetaItemKind};
1717
use syntax::source_map::{FileName, FilePathMapping};
1818
use syntax::edition::{Edition, EDITION_NAME_LIST, DEFAULT_EDITION};
19-
use syntax::parse::{ParseSess, new_parser_from_source_str};
19+
use syntax::parse::new_parser_from_source_str;
2020
use syntax::parse::token;
21+
use syntax::sess::ParseSess;
2122
use syntax::symbol::{sym, Symbol};
2223
use syntax::feature_gate::UnstableFeatures;
2324
use syntax::source_map::SourceMap;

src/librustc/session/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use syntax::ext::allocator::AllocatorKind;
2828
use syntax::feature_gate::{self, AttributeType};
2929
use syntax::json::JsonEmitter;
3030
use syntax::source_map;
31-
use syntax::parse::{self, ParseSess};
31+
use syntax::sess::ParseSess;
3232
use syntax::symbol::Symbol;
3333
use syntax_pos::{MultiSpan, Span};
3434
use crate::util::profiling::{SelfProfiler, SelfProfilerRef};
@@ -1159,7 +1159,7 @@ fn build_session_(
11591159
);
11601160
let target_cfg = config::build_target_config(&sopts, &span_diagnostic);
11611161

1162-
let parse_sess = parse::ParseSess::with_span_handler(
1162+
let parse_sess = ParseSess::with_span_handler(
11631163
span_diagnostic,
11641164
source_map,
11651165
);

src/librustdoc/clean/cfg.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use std::ops;
99

1010
use syntax::symbol::{Symbol, sym};
1111
use syntax::ast::{MetaItem, MetaItemKind, NestedMetaItem, LitKind};
12-
use syntax::parse::ParseSess;
12+
use syntax::sess::ParseSess;
1313
use syntax::feature_gate::Features;
1414

1515
use syntax_pos::Span;

src/librustdoc/html/highlight.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use std::io::prelude::*;
1414
use syntax::source_map::{SourceMap, FilePathMapping};
1515
use syntax::parse::lexer;
1616
use syntax::parse::token::{self, Token};
17-
use syntax::parse;
17+
use syntax::sess::ParseSess;
1818
use syntax::symbol::{kw, sym};
1919
use syntax_pos::{Span, FileName};
2020

@@ -33,7 +33,7 @@ pub fn render_with_highlighting(
3333
class, tooltip).unwrap();
3434
}
3535

36-
let sess = parse::ParseSess::new(FilePathMapping::empty());
36+
let sess = ParseSess::new(FilePathMapping::empty());
3737
let fm = sess.source_map().new_source_file(
3838
FileName::Custom(String::from("rustdoc-highlighting")),
3939
src.to_owned(),

src/librustdoc/passes/check_code_block_syntax.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use errors::Applicability;
22
use syntax::parse::lexer::{StringReader as Lexer};
3-
use syntax::parse::{ParseSess, token};
3+
use syntax::parse::token;
4+
use syntax::sess::ParseSess;
45
use syntax::source_map::FilePathMapping;
56
use syntax_pos::{InnerSpan, FileName};
67

src/librustdoc/test.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ pub fn make_test(s: &str,
394394
// Uses libsyntax to parse the doctest and find if there's a main fn and the extern
395395
// crate already is included.
396396
let (already_has_main, already_has_extern_crate, found_macro) = with_globals(edition, || {
397-
use crate::syntax::{parse::{self, ParseSess}, source_map::FilePathMapping};
397+
use crate::syntax::{parse, sess::ParseSess, source_map::FilePathMapping};
398398
use errors::emitter::EmitterWriter;
399399
use errors::Handler;
400400

src/libsyntax/attr/builtin.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use crate::ast::{self, Attribute, MetaItem, NestedMetaItem};
44
use crate::early_buffered_lints::BufferedEarlyLintId;
55
use crate::ext::base::ExtCtxt;
66
use crate::feature_gate::{Features, GatedCfg};
7-
use crate::parse::ParseSess;
87
use crate::print::pprust;
8+
use crate::sess::ParseSess;
99

1010
use errors::{Applicability, Handler};
1111
use syntax_pos::hygiene::Transparency;

src/libsyntax/attr/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ use crate::mut_visit::visit_clobber;
1616
use crate::source_map::{BytePos, Spanned, DUMMY_SP};
1717
use crate::parse::lexer::comments::{doc_comment_style, strip_doc_comment_decoration};
1818
use crate::parse::parser::Parser;
19-
use crate::parse::{ParseSess, PResult};
19+
use crate::parse::PResult;
2020
use crate::parse::token::{self, Token};
2121
use crate::ptr::P;
22+
use crate::sess::ParseSess;
2223
use crate::symbol::{sym, Symbol};
2324
use crate::ThinVec;
2425
use crate::tokenstream::{TokenStream, TokenTree, DelimSpan};

src/libsyntax/config.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ use crate::attr;
1010
use crate::ast;
1111
use crate::edition::Edition;
1212
use crate::mut_visit::*;
13-
use crate::parse::{token, ParseSess};
13+
use crate::parse::token;
1414
use crate::ptr::P;
15+
use crate::sess::ParseSess;
1516
use crate::symbol::sym;
1617
use crate::util::map_in_place::MapInPlace;
1718

src/libsyntax/ext/base.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ use crate::edition::Edition;
55
use crate::ext::expand::{self, AstFragment, Invocation};
66
use crate::ext::hygiene::ExpnId;
77
use crate::mut_visit::{self, MutVisitor};
8-
use crate::parse::{self, parser, ParseSess, DirectoryOwnership};
8+
use crate::parse::{self, parser, DirectoryOwnership};
99
use crate::parse::token;
1010
use crate::ptr::P;
11+
use crate::sess::ParseSess;
1112
use crate::symbol::{kw, sym, Ident, Symbol};
1213
use crate::{ThinVec, MACRO_ARGUMENTS};
1314
use crate::tokenstream::{self, TokenStream};
@@ -892,7 +893,7 @@ pub struct ExpansionData {
892893
/// when a macro expansion occurs, the resulting nodes have the `backtrace()
893894
/// -> expn_data` of their expansion context stored into their span.
894895
pub struct ExtCtxt<'a> {
895-
pub parse_sess: &'a parse::ParseSess,
896+
pub parse_sess: &'a ParseSess,
896897
pub ecfg: expand::ExpansionConfig<'a>,
897898
pub root_path: PathBuf,
898899
pub resolver: &'a mut dyn Resolver,
@@ -901,7 +902,7 @@ pub struct ExtCtxt<'a> {
901902
}
902903

903904
impl<'a> ExtCtxt<'a> {
904-
pub fn new(parse_sess: &'a parse::ParseSess,
905+
pub fn new(parse_sess: &'a ParseSess,
905906
ecfg: expand::ExpansionConfig<'a>,
906907
resolver: &'a mut dyn Resolver)
907908
-> ExtCtxt<'a> {
@@ -935,7 +936,7 @@ impl<'a> ExtCtxt<'a> {
935936
parse::stream_to_parser(self.parse_sess, stream, MACRO_ARGUMENTS)
936937
}
937938
pub fn source_map(&self) -> &'a SourceMap { self.parse_sess.source_map() }
938-
pub fn parse_sess(&self) -> &'a parse::ParseSess { self.parse_sess }
939+
pub fn parse_sess(&self) -> &'a ParseSess { self.parse_sess }
939940
pub fn cfg(&self) -> &ast::CrateConfig { &self.parse_sess.config }
940941
pub fn call_site(&self) -> Span {
941942
self.current_expansion.id.expn_data().call_site

src/libsyntax/ext/expand.rs

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use crate::parse::token;
1515
use crate::parse::parser::Parser;
1616
use crate::print::pprust;
1717
use crate::ptr::P;
18+
use crate::sess::ParseSess;
1819
use crate::symbol::{sym, Symbol};
1920
use crate::tokenstream::{TokenStream, TokenTree};
2021
use crate::visit::Visitor;

src/libsyntax/ext/mbe/macro_check.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ use crate::early_buffered_lints::BufferedEarlyLintId;
109109
use crate::ext::mbe::{KleeneToken, TokenTree};
110110
use crate::parse::token::TokenKind;
111111
use crate::parse::token::{DelimToken, Token};
112-
use crate::parse::ParseSess;
112+
use crate::sess::ParseSess;
113113
use crate::symbol::{kw, sym};
114114

115115
use rustc_data_structures::fx::FxHashMap;

src/libsyntax/ext/mbe/macro_parser.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,11 @@ use TokenTreeOrTokenTreeSlice::*;
7676

7777
use crate::ast::{Ident, Name};
7878
use crate::ext::mbe::{self, TokenTree};
79-
use crate::parse::{Directory, ParseSess, PResult};
79+
use crate::parse::{Directory, PResult};
8080
use crate::parse::parser::{Parser, PathStyle};
8181
use crate::parse::token::{self, DocComment, Nonterminal, Token};
8282
use crate::print::pprust;
83+
use crate::sess::ParseSess;
8384
use crate::symbol::{kw, sym, Symbol};
8485
use crate::tokenstream::{DelimSpan, TokenStream};
8586

src/libsyntax/ext/mbe/macro_rules.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ use crate::feature_gate::Features;
1414
use crate::parse::parser::Parser;
1515
use crate::parse::token::TokenKind::*;
1616
use crate::parse::token::{self, NtTT, Token};
17-
use crate::parse::{Directory, ParseSess};
17+
use crate::parse::Directory;
1818
use crate::print::pprust;
19+
use crate::sess::ParseSess;
1920
use crate::symbol::{kw, sym, Symbol};
2021
use crate::tokenstream::{DelimSpan, TokenStream, TokenTree};
2122

src/libsyntax/ext/mbe/quoted.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use crate::ast;
22
use crate::ext::mbe::macro_parser;
33
use crate::ext::mbe::{TokenTree, KleeneOp, KleeneToken, SequenceRepetition, Delimited};
44
use crate::parse::token::{self, Token};
5-
use crate::parse::ParseSess;
65
use crate::print::pprust;
6+
use crate::sess::ParseSess;
77
use crate::symbol::kw;
88
use crate::tokenstream;
99

src/libsyntax/ext/proc_macro_server.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use crate::ast;
22
use crate::ext::base::ExtCtxt;
3-
use crate::parse::{self, token, ParseSess};
3+
use crate::parse::{self, token};
44
use crate::parse::lexer::comments;
55
use crate::print::pprust;
6+
use crate::sess::ParseSess;
67
use crate::tokenstream::{self, DelimSpan, IsJoint::*, TokenStream, TreeAndJoint};
78

89
use errors::Diagnostic;

src/libsyntax/feature_gate/builtin_attrs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use super::active::Features;
99

1010
use crate::ast;
1111
use crate::attr::AttributeTemplate;
12+
use crate::sess::ParseSess;
1213
use crate::symbol::{Symbol, sym};
13-
use crate::parse::ParseSess;
1414

1515
use syntax_pos::Span;
1616
use rustc_data_structures::fx::FxHashMap;

src/libsyntax/feature_gate/check.rs

+49-4
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ use super::builtin_attrs::{AttributeGate, BUILTIN_ATTRIBUTE_MAP};
55

66
use crate::ast::{
77
self, AssocTyConstraint, AssocTyConstraintKind, NodeId, GenericParam, GenericParamKind,
8-
PatKind, RangeEnd,
8+
PatKind, RangeEnd, VariantData,
99
};
1010
use crate::attr::{self, check_builtin_attribute};
1111
use crate::source_map::Spanned;
1212
use crate::edition::{ALL_EDITIONS, Edition};
1313
use crate::visit::{self, FnKind, Visitor};
14-
use crate::parse::{token, ParseSess};
15-
use crate::parse::parser::Parser;
14+
use crate::parse::token;
15+
use crate::sess::ParseSess;
1616
use crate::symbol::{Symbol, sym};
1717
use crate::tokenstream::TokenTree;
1818

@@ -246,6 +246,51 @@ impl<'a> PostExpansionVisitor<'a> {
246246
Abi::System => {}
247247
}
248248
}
249+
250+
fn maybe_report_invalid_custom_discriminants(&self, variants: &[ast::Variant]) {
251+
let has_fields = variants.iter().any(|variant| match variant.data {
252+
VariantData::Tuple(..) | VariantData::Struct(..) => true,
253+
VariantData::Unit(..) => false,
254+
});
255+
256+
let discriminant_spans = variants.iter().filter(|variant| match variant.data {
257+
VariantData::Tuple(..) | VariantData::Struct(..) => false,
258+
VariantData::Unit(..) => true,
259+
})
260+
.filter_map(|variant| variant.disr_expr.as_ref().map(|c| c.value.span))
261+
.collect::<Vec<_>>();
262+
263+
if !discriminant_spans.is_empty() && has_fields {
264+
let mut err = feature_err(
265+
self.parse_sess,
266+
sym::arbitrary_enum_discriminant,
267+
discriminant_spans.clone(),
268+
crate::feature_gate::GateIssue::Language,
269+
"custom discriminant values are not allowed in enums with tuple or struct variants",
270+
);
271+
for sp in discriminant_spans {
272+
err.span_label(sp, "disallowed custom discriminant");
273+
}
274+
for variant in variants.iter() {
275+
match &variant.data {
276+
VariantData::Struct(..) => {
277+
err.span_label(
278+
variant.span,
279+
"struct variant defined here",
280+
);
281+
}
282+
VariantData::Tuple(..) => {
283+
err.span_label(
284+
variant.span,
285+
"tuple variant defined here",
286+
);
287+
}
288+
VariantData::Unit(..) => {}
289+
}
290+
}
291+
err.emit();
292+
}
293+
}
249294
}
250295

251296
impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
@@ -353,7 +398,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
353398

354399
let has_feature = self.features.arbitrary_enum_discriminant;
355400
if !has_feature && !i.span.allows_unstable(sym::arbitrary_enum_discriminant) {
356-
Parser::maybe_report_invalid_custom_discriminants(self.parse_sess, &variants);
401+
self.maybe_report_invalid_custom_discriminants(&variants);
357402
}
358403
}
359404

src/libsyntax/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ pub mod ptr;
147147
pub mod show_span;
148148
pub use syntax_pos::edition;
149149
pub use syntax_pos::symbol;
150+
pub mod sess;
150151
pub mod tokenstream;
151152
pub mod visit;
152153

0 commit comments

Comments
 (0)