Skip to content

Commit a076257

Browse files
committed
Move MacroKinds from rustc_span to rustc_hir
1 parent ada6cbe commit a076257

File tree

16 files changed

+73
-76
lines changed

16 files changed

+73
-76
lines changed

compiler/rustc_expand/src/base.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use rustc_errors::{DiagCtxtHandle, ErrorGuaranteed, PResult};
1717
use rustc_feature::Features;
1818
use rustc_hir as hir;
1919
use rustc_hir::attrs::{AttributeKind, CfgEntry, Deprecation};
20-
use rustc_hir::{Stability, find_attr};
20+
use rustc_hir::{MacroKinds, Stability, find_attr};
2121
use rustc_lint_defs::{BufferedEarlyLint, RegisteredTools};
2222
use rustc_parse::MACRO_ARGUMENTS;
2323
use rustc_parse::parser::{ForceCollect, Parser};
@@ -26,7 +26,7 @@ use rustc_session::parse::ParseSess;
2626
use rustc_session::{Limit, Session};
2727
use rustc_span::def_id::{CrateNum, DefId, LocalDefId};
2828
use rustc_span::edition::Edition;
29-
use rustc_span::hygiene::{AstPass, ExpnData, ExpnKind, LocalExpnId, MacroKind, MacroKinds};
29+
use rustc_span::hygiene::{AstPass, ExpnData, ExpnKind, LocalExpnId, MacroKind};
3030
use rustc_span::source_map::SourceMap;
3131
use rustc_span::{DUMMY_SP, FileName, Ident, Span, Symbol, kw, sym};
3232
use smallvec::{SmallVec, smallvec};

compiler/rustc_expand/src/mbe/macro_rules.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use rustc_errors::{Applicability, Diag, ErrorGuaranteed, MultiSpan};
1515
use rustc_feature::Features;
1616
use rustc_hir as hir;
1717
use rustc_hir::attrs::AttributeKind;
18-
use rustc_hir::find_attr;
18+
use rustc_hir::{MacroKinds, find_attr};
1919
use rustc_lint_defs::BuiltinLintDiag;
2020
use rustc_lint_defs::builtin::{
2121
RUST_2021_INCOMPATIBLE_OR_PATTERNS, SEMICOLON_IN_EXPRESSIONS_FROM_MACROS,
@@ -25,7 +25,7 @@ use rustc_parse::parser::{Parser, Recovery};
2525
use rustc_session::Session;
2626
use rustc_session::parse::{ParseSess, feature_err};
2727
use rustc_span::edition::Edition;
28-
use rustc_span::hygiene::{MacroKinds, Transparency};
28+
use rustc_span::hygiene::Transparency;
2929
use rustc_span::{Ident, Span, kw, sym};
3030
use tracing::{debug, instrument, trace, trace_span};
3131

compiler/rustc_hir/src/def.rs

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use rustc_data_structures::unord::UnordMap;
88
use rustc_macros::{Decodable, Encodable, HashStable_Generic};
99
use rustc_span::Symbol;
1010
use rustc_span::def_id::{DefId, LocalDefId};
11-
use rustc_span::hygiene::MacroKinds;
11+
use rustc_span::hygiene::MacroKind;
1212

1313
use crate::definitions::DefPathData;
1414
use crate::hir;
@@ -31,6 +31,53 @@ pub enum CtorKind {
3131
Const,
3232
}
3333

34+
/// A set of macro kinds, for macros that can have more than one kind
35+
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Encodable, Decodable, Hash, Debug)]
36+
#[derive(HashStable_Generic)]
37+
pub struct MacroKinds(u8);
38+
bitflags::bitflags! {
39+
impl MacroKinds: u8 {
40+
const BANG = 1 << 0;
41+
const ATTR = 1 << 1;
42+
const DERIVE = 1 << 2;
43+
}
44+
}
45+
46+
impl From<MacroKind> for MacroKinds {
47+
fn from(kind: MacroKind) -> Self {
48+
match kind {
49+
MacroKind::Bang => Self::BANG,
50+
MacroKind::Attr => Self::ATTR,
51+
MacroKind::Derive => Self::DERIVE,
52+
}
53+
}
54+
}
55+
56+
impl MacroKinds {
57+
/// Convert the MacroKinds to a static string.
58+
///
59+
/// This hardcodes all the possibilities, in order to return a static string.
60+
pub fn descr(self) -> &'static str {
61+
match self {
62+
// FIXME: change this to "function-like macro" and fix all tests
63+
Self::BANG => "macro",
64+
Self::ATTR => "attribute macro",
65+
Self::DERIVE => "derive macro",
66+
_ if self == (Self::ATTR | Self::BANG) => "attribute/function macro",
67+
_ if self == (Self::DERIVE | Self::BANG) => "derive/function macro",
68+
_ if self == (Self::ATTR | Self::DERIVE) => "attribute/derive macro",
69+
_ if self.is_all() => "attribute/derive/function macro",
70+
_ if self.is_empty() => "useless macro",
71+
_ => unreachable!(),
72+
}
73+
}
74+
75+
/// Return an indefinite article (a/an) for use with `descr()`
76+
pub fn article(self) -> &'static str {
77+
if self.contains(Self::ATTR) { "an" } else { "a" }
78+
}
79+
}
80+
3481
/// An attribute that is not a macro; e.g., `#[inline]` or `#[rustfmt::skip]`.
3582
#[derive(Clone, Copy, PartialEq, Eq, Encodable, Decodable, Hash, Debug, HashStable_Generic)]
3683
pub enum NonMacroAttrKind {

compiler/rustc_hir/src/hir.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ use rustc_data_structures::tagged_ptr::TaggedRef;
2020
use rustc_index::IndexVec;
2121
use rustc_macros::{Decodable, Encodable, HashStable_Generic};
2222
use rustc_span::def_id::LocalDefId;
23-
use rustc_span::hygiene::MacroKinds;
2423
use rustc_span::source_map::Spanned;
2524
use rustc_span::{BytePos, DUMMY_SP, ErrorGuaranteed, Ident, Span, Symbol, kw, sym};
2625
use rustc_target::asm::InlineAsmRegOrRegClass;
@@ -30,7 +29,7 @@ use tracing::debug;
3029

3130
use crate::LangItem;
3231
use crate::attrs::AttributeKind;
33-
use crate::def::{CtorKind, DefKind, PerNS, Res};
32+
use crate::def::{CtorKind, DefKind, MacroKinds, PerNS, Res};
3433
use crate::def_id::{DefId, LocalDefIdMap};
3534
pub(crate) use crate::hir_id::{HirId, ItemLocalId, ItemLocalMap, OwnerId};
3635
use crate::intravisit::{FnKind, VisitorExt};

compiler/rustc_hir/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ pub mod weak_lang_items;
3939
#[cfg(test)]
4040
mod tests;
4141

42+
pub use def::MacroKinds;
4243
#[doc(no_inline)]
4344
pub use hir::*;
4445
pub use hir_id::*;

compiler/rustc_metadata/src/rmeta/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use rustc_abi::{FieldIdx, ReprOptions, VariantIdx};
1111
use rustc_data_structures::fx::FxHashMap;
1212
use rustc_data_structures::svh::Svh;
1313
use rustc_hir::attrs::StrippedCfgItem;
14-
use rustc_hir::def::{CtorKind, DefKind, DocLinkResMap};
14+
use rustc_hir::def::{CtorKind, DefKind, DocLinkResMap, MacroKinds};
1515
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, DefIndex, DefPathHash, StableCrateId};
1616
use rustc_hir::definitions::DefKey;
1717
use rustc_hir::lang_items::LangItem;
@@ -35,7 +35,7 @@ use rustc_serialize::opaque::FileEncoder;
3535
use rustc_session::config::{SymbolManglingVersion, TargetModifier};
3636
use rustc_session::cstore::{CrateDepKind, ForeignModule, LinkagePreference, NativeLib};
3737
use rustc_span::edition::Edition;
38-
use rustc_span::hygiene::{ExpnIndex, MacroKind, MacroKinds, SyntaxContextKey};
38+
use rustc_span::hygiene::{ExpnIndex, MacroKind, SyntaxContextKey};
3939
use rustc_span::{self, ExpnData, ExpnHash, ExpnId, Ident, Span, Symbol};
4040
use rustc_target::spec::{PanicStrategy, TargetTuple};
4141
use table::TableBuilder;

compiler/rustc_resolve/src/diagnostics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use rustc_errors::{
1313
use rustc_feature::BUILTIN_ATTRIBUTES;
1414
use rustc_hir::attrs::{AttributeKind, CfgEntry, StrippedCfgItem};
1515
use rustc_hir::def::Namespace::{self, *};
16-
use rustc_hir::def::{self, CtorKind, CtorOf, DefKind, NonMacroAttrKind, PerNS};
16+
use rustc_hir::def::{self, CtorKind, CtorOf, DefKind, MacroKinds, NonMacroAttrKind, PerNS};
1717
use rustc_hir::def_id::{CRATE_DEF_ID, DefId};
1818
use rustc_hir::{PrimTy, Stability, StabilityLevel, find_attr};
1919
use rustc_middle::bug;
@@ -27,7 +27,7 @@ use rustc_session::lint::{AmbiguityErrorDiag, BuiltinLintDiag};
2727
use rustc_session::utils::was_invoked_from_cargo;
2828
use rustc_span::edit_distance::find_best_match_for_name;
2929
use rustc_span::edition::Edition;
30-
use rustc_span::hygiene::{MacroKind, MacroKinds};
30+
use rustc_span::hygiene::MacroKind;
3131
use rustc_span::source_map::SourceMap;
3232
use rustc_span::{BytePos, Ident, Macros20NormalizedIdent, Span, Symbol, SyntaxContext, kw, sym};
3333
use thin_vec::{ThinVec, thin_vec};

compiler/rustc_resolve/src/ident.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ use Determinacy::*;
22
use Namespace::*;
33
use rustc_ast::{self as ast, NodeId};
44
use rustc_errors::ErrorGuaranteed;
5-
use rustc_hir::def::{DefKind, Namespace, NonMacroAttrKind, PartialRes, PerNS};
5+
use rustc_hir::def::{DefKind, MacroKinds, Namespace, NonMacroAttrKind, PartialRes, PerNS};
66
use rustc_middle::bug;
77
use rustc_session::lint::BuiltinLintDiag;
88
use rustc_session::lint::builtin::PROC_MACRO_DERIVE_RESOLUTION_FALLBACK;
99
use rustc_session::parse::feature_err;
10-
use rustc_span::hygiene::{ExpnId, ExpnKind, LocalExpnId, MacroKind, MacroKinds, SyntaxContext};
10+
use rustc_span::hygiene::{ExpnId, ExpnKind, LocalExpnId, MacroKind, SyntaxContext};
1111
use rustc_span::{Ident, Span, kw, sym};
1212
use tracing::{debug, instrument};
1313

compiler/rustc_resolve/src/late/diagnostics.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,13 @@ use rustc_errors::{
1919
};
2020
use rustc_hir as hir;
2121
use rustc_hir::def::Namespace::{self, *};
22-
use rustc_hir::def::{self, CtorKind, CtorOf, DefKind};
22+
use rustc_hir::def::{self, CtorKind, CtorOf, DefKind, MacroKinds};
2323
use rustc_hir::def_id::{CRATE_DEF_ID, DefId};
2424
use rustc_hir::{MissingLifetimeKind, PrimTy};
2525
use rustc_middle::ty;
2626
use rustc_session::{Session, lint};
2727
use rustc_span::edit_distance::{edit_distance, find_best_match_for_name};
2828
use rustc_span::edition::Edition;
29-
use rustc_span::hygiene::MacroKinds;
3029
use rustc_span::{DUMMY_SP, Ident, Span, Symbol, kw, sym};
3130
use thin_vec::ThinVec;
3231
use tracing::debug;

compiler/rustc_resolve/src/lib.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ use rustc_feature::BUILTIN_ATTRIBUTES;
5353
use rustc_hir::attrs::StrippedCfgItem;
5454
use rustc_hir::def::Namespace::{self, *};
5555
use rustc_hir::def::{
56-
self, CtorOf, DefKind, DocLinkResMap, LifetimeRes, NonMacroAttrKind, PartialRes, PerNS,
56+
self, CtorOf, DefKind, DocLinkResMap, LifetimeRes, MacroKinds, NonMacroAttrKind, PartialRes,
57+
PerNS,
5758
};
5859
use rustc_hir::def_id::{CRATE_DEF_ID, CrateNum, DefId, LOCAL_CRATE, LocalDefId, LocalDefIdMap};
5960
use rustc_hir::definitions::DisambiguatorState;
@@ -71,9 +72,7 @@ use rustc_middle::ty::{
7172
use rustc_query_system::ich::StableHashingContext;
7273
use rustc_session::lint::builtin::PRIVATE_MACRO_USE;
7374
use rustc_session::lint::{BuiltinLintDiag, LintBuffer};
74-
use rustc_span::hygiene::{
75-
ExpnId, LocalExpnId, MacroKind, MacroKinds, SyntaxContext, Transparency,
76-
};
75+
use rustc_span::hygiene::{ExpnId, LocalExpnId, MacroKind, SyntaxContext, Transparency};
7776
use rustc_span::{DUMMY_SP, Ident, Macros20NormalizedIdent, Span, Symbol, kw, sym};
7877
use smallvec::{SmallVec, smallvec};
7978
use tracing::debug;

0 commit comments

Comments
 (0)