mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-25 20:43:21 +00:00
Merge #5585
5585: Finish extern crate grammar r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
be803efb7c
11 changed files with 80 additions and 80 deletions
|
@ -671,7 +671,7 @@ impl ExprCollector<'_> {
|
||||||
ast::Item::ExternBlock(_) => return None, // FIXME: collect from extern blocks
|
ast::Item::ExternBlock(_) => return None, // FIXME: collect from extern blocks
|
||||||
ast::Item::ImplDef(_)
|
ast::Item::ImplDef(_)
|
||||||
| ast::Item::UseItem(_)
|
| ast::Item::UseItem(_)
|
||||||
| ast::Item::ExternCrateItem(_)
|
| ast::Item::ExternCrate(_)
|
||||||
| ast::Item::Module(_)
|
| ast::Item::Module(_)
|
||||||
| ast::Item::MacroCall(_) => return None,
|
| ast::Item::MacroCall(_) => return None,
|
||||||
};
|
};
|
||||||
|
|
|
@ -412,7 +412,7 @@ macro_rules! mod_items {
|
||||||
|
|
||||||
mod_items! {
|
mod_items! {
|
||||||
Import in imports -> ast::UseItem,
|
Import in imports -> ast::UseItem,
|
||||||
ExternCrate in extern_crates -> ast::ExternCrateItem,
|
ExternCrate in extern_crates -> ast::ExternCrate,
|
||||||
Function in functions -> ast::FnDef,
|
Function in functions -> ast::FnDef,
|
||||||
Struct in structs -> ast::StructDef,
|
Struct in structs -> ast::StructDef,
|
||||||
Union in unions -> ast::UnionDef,
|
Union in unions -> ast::UnionDef,
|
||||||
|
@ -492,7 +492,7 @@ pub struct ExternCrate {
|
||||||
pub visibility: RawVisibilityId,
|
pub visibility: RawVisibilityId,
|
||||||
/// Whether this is a `#[macro_use] extern crate ...`.
|
/// Whether this is a `#[macro_use] extern crate ...`.
|
||||||
pub is_macro_use: bool,
|
pub is_macro_use: bool,
|
||||||
pub ast_id: FileAstId<ast::ExternCrateItem>,
|
pub ast_id: FileAstId<ast::ExternCrate>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||||
|
|
|
@ -95,7 +95,7 @@ impl Ctx {
|
||||||
ast::Item::TraitDef(_) | ast::Item::ImplDef(_) | ast::Item::ExternBlock(_) => {}
|
ast::Item::TraitDef(_) | ast::Item::ImplDef(_) | ast::Item::ExternBlock(_) => {}
|
||||||
|
|
||||||
// These don't have inner items.
|
// These don't have inner items.
|
||||||
ast::Item::Module(_) | ast::Item::ExternCrateItem(_) | ast::Item::UseItem(_) => {}
|
ast::Item::Module(_) | ast::Item::ExternCrate(_) | ast::Item::UseItem(_) => {}
|
||||||
};
|
};
|
||||||
|
|
||||||
let attrs = Attrs::new(item, &self.hygiene);
|
let attrs = Attrs::new(item, &self.hygiene);
|
||||||
|
@ -113,7 +113,7 @@ impl Ctx {
|
||||||
ast::Item::UseItem(ast) => Some(ModItems(
|
ast::Item::UseItem(ast) => Some(ModItems(
|
||||||
self.lower_use(ast).into_iter().map(Into::into).collect::<SmallVec<_>>(),
|
self.lower_use(ast).into_iter().map(Into::into).collect::<SmallVec<_>>(),
|
||||||
)),
|
)),
|
||||||
ast::Item::ExternCrateItem(ast) => self.lower_extern_crate(ast).map(Into::into),
|
ast::Item::ExternCrate(ast) => self.lower_extern_crate(ast).map(Into::into),
|
||||||
ast::Item::MacroCall(ast) => self.lower_macro_call(ast).map(Into::into),
|
ast::Item::MacroCall(ast) => self.lower_macro_call(ast).map(Into::into),
|
||||||
ast::Item::ExternBlock(ast) => {
|
ast::Item::ExternBlock(ast) => {
|
||||||
Some(ModItems(self.lower_extern_block(ast).into_iter().collect::<SmallVec<_>>()))
|
Some(ModItems(self.lower_extern_block(ast).into_iter().collect::<SmallVec<_>>()))
|
||||||
|
@ -498,7 +498,7 @@ impl Ctx {
|
||||||
|
|
||||||
fn lower_extern_crate(
|
fn lower_extern_crate(
|
||||||
&mut self,
|
&mut self,
|
||||||
extern_crate: &ast::ExternCrateItem,
|
extern_crate: &ast::ExternCrate,
|
||||||
) -> Option<FileItemTreeId<ExternCrate>> {
|
) -> Option<FileItemTreeId<ExternCrate>> {
|
||||||
let path = ModPath::from_name_ref(&extern_crate.name_ref()?);
|
let path = ModPath::from_name_ref(&extern_crate.name_ref()?);
|
||||||
let alias = extern_crate.rename().map(|a| {
|
let alias = extern_crate.rename().map(|a| {
|
||||||
|
|
|
@ -232,7 +232,7 @@ fn smoke() {
|
||||||
#[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("attr_on_use"))] }, input: None }]) }]
|
#[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("attr_on_use"))] }, input: None }]) }]
|
||||||
Import { path: ModPath { kind: Plain, segments: [Name(Text("b"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_glob: true, is_prelude: false, ast_id: FileAstId::<ra_syntax::ast::generated::nodes::UseItem>(0) }
|
Import { path: ModPath { kind: Plain, segments: [Name(Text("b"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_glob: true, is_prelude: false, ast_id: FileAstId::<ra_syntax::ast::generated::nodes::UseItem>(0) }
|
||||||
#[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("ext_crate"))] }, input: None }]) }]
|
#[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("ext_crate"))] }, input: None }]) }]
|
||||||
ExternCrate { path: ModPath { kind: Plain, segments: [Name(Text("krate"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_macro_use: false, ast_id: FileAstId::<ra_syntax::ast::generated::nodes::ExternCrateItem>(1) }
|
ExternCrate { path: ModPath { kind: Plain, segments: [Name(Text("krate"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_macro_use: false, ast_id: FileAstId::<ra_syntax::ast::generated::nodes::ExternCrate>(1) }
|
||||||
#[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("on_trait"))] }, input: None }]) }]
|
#[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("on_trait"))] }, input: None }]) }]
|
||||||
Trait { name: Name(Text("Tr")), visibility: RawVisibilityId("pub(self)"), generic_params: GenericParamsId(0), auto: false, items: [TypeAlias(Idx::<TypeAlias>(0)), Const(Idx::<Const>(0)), Function(Idx::<Function>(0)), Function(Idx::<Function>(1))], ast_id: FileAstId::<ra_syntax::ast::generated::nodes::TraitDef>(2) }
|
Trait { name: Name(Text("Tr")), visibility: RawVisibilityId("pub(self)"), generic_params: GenericParamsId(0), auto: false, items: [TypeAlias(Idx::<TypeAlias>(0)), Const(Idx::<Const>(0)), Function(Idx::<Function>(0)), Function(Idx::<Function>(1))], ast_id: FileAstId::<ra_syntax::ast::generated::nodes::TraitDef>(2) }
|
||||||
> #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("assoc_ty"))] }, input: None }]) }]
|
> #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("assoc_ty"))] }, input: None }]) }]
|
||||||
|
|
|
@ -313,7 +313,7 @@ fn extern_crate_item(p: &mut Parser, m: Marker) {
|
||||||
|
|
||||||
opt_alias(p);
|
opt_alias(p);
|
||||||
p.expect(T![;]);
|
p.expect(T![;]);
|
||||||
m.complete(p, EXTERN_CRATE_ITEM);
|
m.complete(p, EXTERN_CRATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn extern_item_list(p: &mut Parser) {
|
pub(crate) fn extern_item_list(p: &mut Parser) {
|
||||||
|
|
|
@ -128,7 +128,7 @@ pub enum SyntaxKind {
|
||||||
ENUM_DEF,
|
ENUM_DEF,
|
||||||
FN_DEF,
|
FN_DEF,
|
||||||
RET_TYPE,
|
RET_TYPE,
|
||||||
EXTERN_CRATE_ITEM,
|
EXTERN_CRATE,
|
||||||
MODULE,
|
MODULE,
|
||||||
USE_ITEM,
|
USE_ITEM,
|
||||||
STATIC_DEF,
|
STATIC_DEF,
|
||||||
|
|
|
@ -65,12 +65,12 @@ impl ExternBlock {
|
||||||
pub fn extern_item_list(&self) -> Option<ExternItemList> { support::child(&self.syntax) }
|
pub fn extern_item_list(&self) -> Option<ExternItemList> { support::child(&self.syntax) }
|
||||||
}
|
}
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct ExternCrateItem {
|
pub struct ExternCrate {
|
||||||
pub(crate) syntax: SyntaxNode,
|
pub(crate) syntax: SyntaxNode,
|
||||||
}
|
}
|
||||||
impl ast::AttrsOwner for ExternCrateItem {}
|
impl ast::AttrsOwner for ExternCrate {}
|
||||||
impl ast::VisibilityOwner for ExternCrateItem {}
|
impl ast::VisibilityOwner for ExternCrate {}
|
||||||
impl ExternCrateItem {
|
impl ExternCrate {
|
||||||
pub fn extern_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![extern]) }
|
pub fn extern_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![extern]) }
|
||||||
pub fn crate_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![crate]) }
|
pub fn crate_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![crate]) }
|
||||||
pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) }
|
pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) }
|
||||||
|
@ -255,6 +255,21 @@ impl ItemList {
|
||||||
pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) }
|
pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) }
|
||||||
}
|
}
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct NameRef {
|
||||||
|
pub(crate) syntax: SyntaxNode,
|
||||||
|
}
|
||||||
|
impl NameRef {
|
||||||
|
pub fn ident_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![ident]) }
|
||||||
|
}
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct Rename {
|
||||||
|
pub(crate) syntax: SyntaxNode,
|
||||||
|
}
|
||||||
|
impl ast::NameOwner for Rename {}
|
||||||
|
impl Rename {
|
||||||
|
pub fn as_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![as]) }
|
||||||
|
}
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct Abi {
|
pub struct Abi {
|
||||||
pub(crate) syntax: SyntaxNode,
|
pub(crate) syntax: SyntaxNode,
|
||||||
}
|
}
|
||||||
|
@ -699,13 +714,6 @@ impl MethodCallExpr {
|
||||||
pub fn type_arg_list(&self) -> Option<TypeArgList> { support::child(&self.syntax) }
|
pub fn type_arg_list(&self) -> Option<TypeArgList> { support::child(&self.syntax) }
|
||||||
}
|
}
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct NameRef {
|
|
||||||
pub(crate) syntax: SyntaxNode,
|
|
||||||
}
|
|
||||||
impl NameRef {
|
|
||||||
pub fn ident_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![ident]) }
|
|
||||||
}
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
|
||||||
pub struct TypeArgList {
|
pub struct TypeArgList {
|
||||||
pub(crate) syntax: SyntaxNode,
|
pub(crate) syntax: SyntaxNode,
|
||||||
}
|
}
|
||||||
|
@ -1190,14 +1198,6 @@ impl UseTreeList {
|
||||||
pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) }
|
pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) }
|
||||||
}
|
}
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct Rename {
|
|
||||||
pub(crate) syntax: SyntaxNode,
|
|
||||||
}
|
|
||||||
impl ast::NameOwner for Rename {}
|
|
||||||
impl Rename {
|
|
||||||
pub fn as_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![as]) }
|
|
||||||
}
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
|
||||||
pub struct PathSegment {
|
pub struct PathSegment {
|
||||||
pub(crate) syntax: SyntaxNode,
|
pub(crate) syntax: SyntaxNode,
|
||||||
}
|
}
|
||||||
|
@ -1272,7 +1272,7 @@ pub enum Item {
|
||||||
ConstDef(ConstDef),
|
ConstDef(ConstDef),
|
||||||
EnumDef(EnumDef),
|
EnumDef(EnumDef),
|
||||||
ExternBlock(ExternBlock),
|
ExternBlock(ExternBlock),
|
||||||
ExternCrateItem(ExternCrateItem),
|
ExternCrate(ExternCrate),
|
||||||
FnDef(FnDef),
|
FnDef(FnDef),
|
||||||
ImplDef(ImplDef),
|
ImplDef(ImplDef),
|
||||||
MacroCall(MacroCall),
|
MacroCall(MacroCall),
|
||||||
|
@ -1451,8 +1451,8 @@ impl AstNode for ExternBlock {
|
||||||
}
|
}
|
||||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||||
}
|
}
|
||||||
impl AstNode for ExternCrateItem {
|
impl AstNode for ExternCrate {
|
||||||
fn can_cast(kind: SyntaxKind) -> bool { kind == EXTERN_CRATE_ITEM }
|
fn can_cast(kind: SyntaxKind) -> bool { kind == EXTERN_CRATE }
|
||||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||||
if Self::can_cast(syntax.kind()) {
|
if Self::can_cast(syntax.kind()) {
|
||||||
Some(Self { syntax })
|
Some(Self { syntax })
|
||||||
|
@ -1605,6 +1605,28 @@ impl AstNode for ItemList {
|
||||||
}
|
}
|
||||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||||
}
|
}
|
||||||
|
impl AstNode for NameRef {
|
||||||
|
fn can_cast(kind: SyntaxKind) -> bool { kind == NAME_REF }
|
||||||
|
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||||
|
if Self::can_cast(syntax.kind()) {
|
||||||
|
Some(Self { syntax })
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||||
|
}
|
||||||
|
impl AstNode for Rename {
|
||||||
|
fn can_cast(kind: SyntaxKind) -> bool { kind == RENAME }
|
||||||
|
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||||
|
if Self::can_cast(syntax.kind()) {
|
||||||
|
Some(Self { syntax })
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||||
|
}
|
||||||
impl AstNode for Abi {
|
impl AstNode for Abi {
|
||||||
fn can_cast(kind: SyntaxKind) -> bool { kind == ABI }
|
fn can_cast(kind: SyntaxKind) -> bool { kind == ABI }
|
||||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||||
|
@ -2111,17 +2133,6 @@ impl AstNode for MethodCallExpr {
|
||||||
}
|
}
|
||||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||||
}
|
}
|
||||||
impl AstNode for NameRef {
|
|
||||||
fn can_cast(kind: SyntaxKind) -> bool { kind == NAME_REF }
|
|
||||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
|
||||||
if Self::can_cast(syntax.kind()) {
|
|
||||||
Some(Self { syntax })
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
|
||||||
}
|
|
||||||
impl AstNode for TypeArgList {
|
impl AstNode for TypeArgList {
|
||||||
fn can_cast(kind: SyntaxKind) -> bool { kind == TYPE_ARG_LIST }
|
fn can_cast(kind: SyntaxKind) -> bool { kind == TYPE_ARG_LIST }
|
||||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||||
|
@ -2683,17 +2694,6 @@ impl AstNode for UseTreeList {
|
||||||
}
|
}
|
||||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||||
}
|
}
|
||||||
impl AstNode for Rename {
|
|
||||||
fn can_cast(kind: SyntaxKind) -> bool { kind == RENAME }
|
|
||||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
|
||||||
if Self::can_cast(syntax.kind()) {
|
|
||||||
Some(Self { syntax })
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
|
||||||
}
|
|
||||||
impl AstNode for PathSegment {
|
impl AstNode for PathSegment {
|
||||||
fn can_cast(kind: SyntaxKind) -> bool { kind == PATH_SEGMENT }
|
fn can_cast(kind: SyntaxKind) -> bool { kind == PATH_SEGMENT }
|
||||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||||
|
@ -2780,8 +2780,8 @@ impl From<EnumDef> for Item {
|
||||||
impl From<ExternBlock> for Item {
|
impl From<ExternBlock> for Item {
|
||||||
fn from(node: ExternBlock) -> Item { Item::ExternBlock(node) }
|
fn from(node: ExternBlock) -> Item { Item::ExternBlock(node) }
|
||||||
}
|
}
|
||||||
impl From<ExternCrateItem> for Item {
|
impl From<ExternCrate> for Item {
|
||||||
fn from(node: ExternCrateItem) -> Item { Item::ExternCrateItem(node) }
|
fn from(node: ExternCrate) -> Item { Item::ExternCrate(node) }
|
||||||
}
|
}
|
||||||
impl From<FnDef> for Item {
|
impl From<FnDef> for Item {
|
||||||
fn from(node: FnDef) -> Item { Item::FnDef(node) }
|
fn from(node: FnDef) -> Item { Item::FnDef(node) }
|
||||||
|
@ -2816,9 +2816,9 @@ impl From<UseItem> for Item {
|
||||||
impl AstNode for Item {
|
impl AstNode for Item {
|
||||||
fn can_cast(kind: SyntaxKind) -> bool {
|
fn can_cast(kind: SyntaxKind) -> bool {
|
||||||
match kind {
|
match kind {
|
||||||
CONST_DEF | ENUM_DEF | EXTERN_BLOCK | EXTERN_CRATE_ITEM | FN_DEF | IMPL_DEF
|
CONST_DEF | ENUM_DEF | EXTERN_BLOCK | EXTERN_CRATE | FN_DEF | IMPL_DEF | MACRO_CALL
|
||||||
| MACRO_CALL | MODULE | STATIC_DEF | STRUCT_DEF | TRAIT_DEF | TYPE_ALIAS_DEF
|
| MODULE | STATIC_DEF | STRUCT_DEF | TRAIT_DEF | TYPE_ALIAS_DEF | UNION_DEF
|
||||||
| UNION_DEF | USE_ITEM => true,
|
| USE_ITEM => true,
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2827,7 +2827,7 @@ impl AstNode for Item {
|
||||||
CONST_DEF => Item::ConstDef(ConstDef { syntax }),
|
CONST_DEF => Item::ConstDef(ConstDef { syntax }),
|
||||||
ENUM_DEF => Item::EnumDef(EnumDef { syntax }),
|
ENUM_DEF => Item::EnumDef(EnumDef { syntax }),
|
||||||
EXTERN_BLOCK => Item::ExternBlock(ExternBlock { syntax }),
|
EXTERN_BLOCK => Item::ExternBlock(ExternBlock { syntax }),
|
||||||
EXTERN_CRATE_ITEM => Item::ExternCrateItem(ExternCrateItem { syntax }),
|
EXTERN_CRATE => Item::ExternCrate(ExternCrate { syntax }),
|
||||||
FN_DEF => Item::FnDef(FnDef { syntax }),
|
FN_DEF => Item::FnDef(FnDef { syntax }),
|
||||||
IMPL_DEF => Item::ImplDef(ImplDef { syntax }),
|
IMPL_DEF => Item::ImplDef(ImplDef { syntax }),
|
||||||
MACRO_CALL => Item::MacroCall(MacroCall { syntax }),
|
MACRO_CALL => Item::MacroCall(MacroCall { syntax }),
|
||||||
|
@ -2847,7 +2847,7 @@ impl AstNode for Item {
|
||||||
Item::ConstDef(it) => &it.syntax,
|
Item::ConstDef(it) => &it.syntax,
|
||||||
Item::EnumDef(it) => &it.syntax,
|
Item::EnumDef(it) => &it.syntax,
|
||||||
Item::ExternBlock(it) => &it.syntax,
|
Item::ExternBlock(it) => &it.syntax,
|
||||||
Item::ExternCrateItem(it) => &it.syntax,
|
Item::ExternCrate(it) => &it.syntax,
|
||||||
Item::FnDef(it) => &it.syntax,
|
Item::FnDef(it) => &it.syntax,
|
||||||
Item::ImplDef(it) => &it.syntax,
|
Item::ImplDef(it) => &it.syntax,
|
||||||
Item::MacroCall(it) => &it.syntax,
|
Item::MacroCall(it) => &it.syntax,
|
||||||
|
@ -3480,7 +3480,7 @@ impl std::fmt::Display for ExternBlock {
|
||||||
std::fmt::Display::fmt(self.syntax(), f)
|
std::fmt::Display::fmt(self.syntax(), f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl std::fmt::Display for ExternCrateItem {
|
impl std::fmt::Display for ExternCrate {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
std::fmt::Display::fmt(self.syntax(), f)
|
std::fmt::Display::fmt(self.syntax(), f)
|
||||||
}
|
}
|
||||||
|
@ -3550,6 +3550,16 @@ impl std::fmt::Display for ItemList {
|
||||||
std::fmt::Display::fmt(self.syntax(), f)
|
std::fmt::Display::fmt(self.syntax(), f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl std::fmt::Display for NameRef {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
std::fmt::Display::fmt(self.syntax(), f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl std::fmt::Display for Rename {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
std::fmt::Display::fmt(self.syntax(), f)
|
||||||
|
}
|
||||||
|
}
|
||||||
impl std::fmt::Display for Abi {
|
impl std::fmt::Display for Abi {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
std::fmt::Display::fmt(self.syntax(), f)
|
std::fmt::Display::fmt(self.syntax(), f)
|
||||||
|
@ -3780,11 +3790,6 @@ impl std::fmt::Display for MethodCallExpr {
|
||||||
std::fmt::Display::fmt(self.syntax(), f)
|
std::fmt::Display::fmt(self.syntax(), f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl std::fmt::Display for NameRef {
|
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
||||||
std::fmt::Display::fmt(self.syntax(), f)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl std::fmt::Display for TypeArgList {
|
impl std::fmt::Display for TypeArgList {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
std::fmt::Display::fmt(self.syntax(), f)
|
std::fmt::Display::fmt(self.syntax(), f)
|
||||||
|
@ -4040,11 +4045,6 @@ impl std::fmt::Display for UseTreeList {
|
||||||
std::fmt::Display::fmt(self.syntax(), f)
|
std::fmt::Display::fmt(self.syntax(), f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl std::fmt::Display for Rename {
|
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
||||||
std::fmt::Display::fmt(self.syntax(), f)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl std::fmt::Display for PathSegment {
|
impl std::fmt::Display for PathSegment {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
std::fmt::Display::fmt(self.syntax(), f)
|
std::fmt::Display::fmt(self.syntax(), f)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
SOURCE_FILE@0..18
|
SOURCE_FILE@0..18
|
||||||
EXTERN_CRATE_ITEM@0..17
|
EXTERN_CRATE@0..17
|
||||||
EXTERN_KW@0..6 "extern"
|
EXTERN_KW@0..6 "extern"
|
||||||
WHITESPACE@6..7 " "
|
WHITESPACE@6..7 " "
|
||||||
CRATE_KW@7..12 "crate"
|
CRATE_KW@7..12 "crate"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
SOURCE_FILE@0..69
|
SOURCE_FILE@0..69
|
||||||
EXTERN_CRATE_ITEM@0..17
|
EXTERN_CRATE@0..17
|
||||||
EXTERN_KW@0..6 "extern"
|
EXTERN_KW@0..6 "extern"
|
||||||
WHITESPACE@6..7 " "
|
WHITESPACE@6..7 " "
|
||||||
CRATE_KW@7..12 "crate"
|
CRATE_KW@7..12 "crate"
|
||||||
|
@ -8,7 +8,7 @@ SOURCE_FILE@0..69
|
||||||
IDENT@13..16 "foo"
|
IDENT@13..16 "foo"
|
||||||
SEMICOLON@16..17 ";"
|
SEMICOLON@16..17 ";"
|
||||||
WHITESPACE@17..18 "\n"
|
WHITESPACE@17..18 "\n"
|
||||||
EXTERN_CRATE_ITEM@18..42
|
EXTERN_CRATE@18..42
|
||||||
EXTERN_KW@18..24 "extern"
|
EXTERN_KW@18..24 "extern"
|
||||||
WHITESPACE@24..25 " "
|
WHITESPACE@24..25 " "
|
||||||
CRATE_KW@25..30 "crate"
|
CRATE_KW@25..30 "crate"
|
||||||
|
@ -23,7 +23,7 @@ SOURCE_FILE@0..69
|
||||||
IDENT@38..41 "bar"
|
IDENT@38..41 "bar"
|
||||||
SEMICOLON@41..42 ";"
|
SEMICOLON@41..42 ";"
|
||||||
WHITESPACE@42..43 "\n"
|
WHITESPACE@42..43 "\n"
|
||||||
EXTERN_CRATE_ITEM@43..68
|
EXTERN_CRATE@43..68
|
||||||
EXTERN_KW@43..49 "extern"
|
EXTERN_KW@43..49 "extern"
|
||||||
WHITESPACE@49..50 " "
|
WHITESPACE@49..50 " "
|
||||||
CRATE_KW@50..55 "crate"
|
CRATE_KW@50..55 "crate"
|
||||||
|
|
|
@ -98,7 +98,7 @@ pub(crate) const KINDS_SRC: KindsSrc = KindsSrc {
|
||||||
"ENUM_DEF",
|
"ENUM_DEF",
|
||||||
"FN_DEF",
|
"FN_DEF",
|
||||||
"RET_TYPE",
|
"RET_TYPE",
|
||||||
"EXTERN_CRATE_ITEM",
|
"EXTERN_CRATE",
|
||||||
"MODULE",
|
"MODULE",
|
||||||
"USE_ITEM",
|
"USE_ITEM",
|
||||||
"STATIC_DEF",
|
"STATIC_DEF",
|
||||||
|
|
|
@ -7,7 +7,7 @@ Item =
|
||||||
ConstDef
|
ConstDef
|
||||||
| EnumDef
|
| EnumDef
|
||||||
| ExternBlock
|
| ExternBlock
|
||||||
| ExternCrateItem
|
| ExternCrate
|
||||||
| FnDef
|
| FnDef
|
||||||
| ImplDef
|
| ImplDef
|
||||||
| MacroCall
|
| MacroCall
|
||||||
|
@ -26,6 +26,9 @@ Module =
|
||||||
ItemList =
|
ItemList =
|
||||||
'{' Attr* Item* '}'
|
'{' Attr* Item* '}'
|
||||||
|
|
||||||
|
ExternCrate =
|
||||||
|
Attr* Visibility? 'extern' 'crate' (NameRef | 'self') Rename? ';'
|
||||||
|
|
||||||
FnDef =
|
FnDef =
|
||||||
Attr* Visibility? Abi? 'const' 'default' 'async' 'unsafe' 'fn' Name TypeParamList?
|
Attr* Visibility? Abi? 'const' 'default' 'async' 'unsafe' 'fn' Name TypeParamList?
|
||||||
ParamList RetType?
|
ParamList RetType?
|
||||||
|
@ -404,9 +407,6 @@ UseTreeList =
|
||||||
Rename =
|
Rename =
|
||||||
'as' Name
|
'as' Name
|
||||||
|
|
||||||
ExternCrateItem =
|
|
||||||
Attr* Visibility? 'extern' 'crate' (NameRef | 'self') Rename? ';'
|
|
||||||
|
|
||||||
Path =
|
Path =
|
||||||
(qualifier:Path '::')? segment:PathSegment
|
(qualifier:Path '::')? segment:PathSegment
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue