Struct apollo_compiler::database::hir::InlineFragment
source · pub struct InlineFragment { /* private fields */ }
Implementations§
source§impl InlineFragment
impl InlineFragment
sourcepub fn type_condition(&self) -> Option<&str>
pub fn type_condition(&self) -> Option<&str>
Get a reference to inline fragment’s type condition.
sourcepub fn parent_type(&self, db: &dyn HirDatabase) -> Option<TypeDefinition>
pub fn parent_type(&self, db: &dyn HirDatabase) -> Option<TypeDefinition>
Get the type this inline fragment is spread onto.
This method does not look up type conditions, so in the example below b.parent_type()
returns the type for “Intf”, not “X”. To look up the type that an inline fragment applies
to, use InlineFragment::type_def
.
Examples
let mut compiler = ApolloCompiler::new();
compiler.add_type_system(r#"
interface Intf {
subField: Int!
}
type X implements Intf {
subField: Int!
subField2: Int!
}
type Query {
field: Intf
}
"#, "schema.graphql");
let id = compiler.add_executable(r#"
query {
... on Query { field { subField } } # spread A
field {
... on X { subField2 } # spread B
}
}
"#, "query.graphql");
let query = compiler.db.find_operation(id, None)?;
let a = &query.selection_set().inline_fragments()[0];
let b = &query.selection_set().field("field")?.selection_set().inline_fragments()[0];
assert_eq!(a.parent_type(&compiler.db)?.name(), "Query");
assert_eq!(b.parent_type(&compiler.db)?.name(), "Intf");
sourcepub fn type_def(&self, db: &dyn HirDatabase) -> Option<TypeDefinition>
pub fn type_def(&self, db: &dyn HirDatabase) -> Option<TypeDefinition>
Get the type this inline fragment applies to: the type condition, or the parent type if a type condition is not given.
Examples
let mut compiler = ApolloCompiler::new();
compiler.add_type_system(r#"
interface Intf {
subField: Int!
}
type X implements Intf {
subField: Int!
subField2: Int!
}
type Query {
field: Intf
}
"#, "schema.graphql");
let id = compiler.add_executable(r#"
query {
... on Query { field { subField } } # spread A
field {
... on X { subField2 } # spread B
}
}
"#, "query.graphql");
let query = compiler.db.find_operation(id, None)?;
let a = &query.selection_set().inline_fragments()[0];
let b = &query.selection_set().field("field")?.selection_set().inline_fragments()[0];
assert_eq!(a.type_def(&compiler.db)?.name(), "Query");
assert_eq!(b.type_def(&compiler.db)?.name(), "X");
sourcepub fn directives(&self) -> &[Directive]
pub fn directives(&self) -> &[Directive]
Get a reference to inline fragment’s directives.
sourcepub fn directive_by_name(&self, name: &str) -> Option<&Directive>
pub fn directive_by_name(&self, name: &str) -> Option<&Directive>
Returns the first directive with the given name.
For repeatable directives, see directives_by_name
(plural).
sourcepub fn directives_by_name<'def: 'name, 'name>(
&'def self,
name: &'name str
) -> impl Iterator<Item = &'def Directive> + 'name
pub fn directives_by_name<'def: 'name, 'name>( &'def self, name: &'name str ) -> impl Iterator<Item = &'def Directive> + 'name
Returns an iterator of directives with the given name.
For non-repeatable directives, directive_by_name
(singular).
sourcepub fn selection_set(&self) -> &SelectionSet
pub fn selection_set(&self) -> &SelectionSet
Get a reference inline fragment’s selection set.
sourcepub fn self_used_variables(&self) -> impl Iterator<Item = Variable> + '_
pub fn self_used_variables(&self) -> impl Iterator<Item = Variable> + '_
Return an iterator over the variables used in directives on this spread.
Variables used inside the fragment are not included. For that, use
variables()
.
sourcepub fn variables(&self, db: &dyn HirDatabase) -> Vec<Variable>
pub fn variables(&self, db: &dyn HirDatabase) -> Vec<Variable>
Get variables in use in the inline fragment.
sourcepub fn loc(&self) -> HirNodeLocation
pub fn loc(&self) -> HirNodeLocation
Get the AST location information for this HIR node.
sourcepub fn is_introspection(&self, db: &dyn HirDatabase) -> bool
pub fn is_introspection(&self, db: &dyn HirDatabase) -> bool
Returns true if the inline fragment’s SelectionSet
is an introspection.
Trait Implementations§
source§impl Clone for InlineFragment
impl Clone for InlineFragment
source§fn clone(&self) -> InlineFragment
fn clone(&self) -> InlineFragment
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for InlineFragment
impl Debug for InlineFragment
source§impl Hash for InlineFragment
impl Hash for InlineFragment
source§impl PartialEq<InlineFragment> for InlineFragment
impl PartialEq<InlineFragment> for InlineFragment
source§fn eq(&self, other: &InlineFragment) -> bool
fn eq(&self, other: &InlineFragment) -> bool
self
and other
values to be equal, and is used
by ==
.impl Eq for InlineFragment
impl StructuralEq for InlineFragment
impl StructuralPartialEq for InlineFragment
Auto Trait Implementations§
impl RefUnwindSafe for InlineFragment
impl Send for InlineFragment
impl Sync for InlineFragment
impl Unpin for InlineFragment
impl UnwindSafe for InlineFragment
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.