Use From to get an owned AST
This commit is contained in:
parent
3ec9f958b3
commit
d685a9b564
3 changed files with 701 additions and 402 deletions
|
@ -11,8 +11,7 @@ use crate::descriptors::{
|
|||
/// TODO: this should return something more type-safe then `SyntaxNode`
|
||||
pub(crate) fn fn_syntax(db: &impl DescriptorDatabase, fn_id: FnId) -> FnDefNode {
|
||||
let syntax = db.resolve_syntax_ptr(fn_id.0);
|
||||
let fn_def = FnDef::cast(syntax.borrowed()).unwrap();
|
||||
FnDefNode::new(fn_def)
|
||||
FnDef::cast(syntax.borrowed()).unwrap().into()
|
||||
}
|
||||
|
||||
pub(crate) fn fn_scopes(db: &impl DescriptorDatabase, fn_id: FnId) -> Arc<FnScopes> {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -17,15 +17,18 @@ use crate::{
|
|||
pub struct {{ node }}Node(SyntaxNode);
|
||||
|
||||
impl {{ node }}Node {
|
||||
pub fn new(ast: {{ node }}) -> {{ node }}Node {
|
||||
let syntax = ast.syntax().owned();
|
||||
{{ node }}Node(syntax)
|
||||
}
|
||||
pub fn ast(&self) -> {{ node }} {
|
||||
{{ node }}::cast(self.0.borrowed()).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<{{ node }}<'a>> for {{ node }}Node {
|
||||
fn from(ast: {{ node}}<'a>) -> {{ node }}Node {
|
||||
let syntax = ast.syntax().owned();
|
||||
{{ node }}Node(syntax)
|
||||
}
|
||||
}
|
||||
|
||||
{%- if methods.enum %}
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum {{ node }}<'a> {
|
||||
|
|
Loading…
Add table
Reference in a new issue