MCPcopy Create free account
hub / github.com/aspizu/goboscript / qualify_field

Method qualify_field

src/codegen/sb3.rs:116–164  ·  view source on GitHub ↗
(
        &self,
        d: D,
        span: &Span,
        qualified_var_name: SmolStr,
        field_name: Option<SmolStr>,
        type_: &Type,
        variant: T,
    )

Source from the content-addressed store, hash-verified

114 }
115
116 fn qualify_field<T>(
117 &self,
118 d: D,
119 span: &Span,
120 qualified_var_name: SmolStr,
121 field_name: Option<SmolStr>,
122 type_: &Type,
123 variant: T,
124 ) -> Option<QualifiedName>
125 where
126 T: FnOnce(SmolStr, Type) -> QualifiedName,
127 {
128 match type_ {
129 Type::Value => match field_name {
130 None => Some(variant(qualified_var_name, type_.clone())),
131 Some(_) => {
132 d.report(DiagnosticKind::NotStruct, span);
133 None
134 }
135 },
136 Type::Struct {
137 name: type_name,
138 span: type_span,
139 } => match field_name {
140 None => {
141 eprintln!("attempted to qualify field without field name: {qualified_var_name} with type: {type_}");
142 None
143 }
144 Some(field_name) => {
145 let struct_ = self.get_struct(type_name)?;
146 if !struct_.fields.iter().any(|field| field.name == field_name) {
147 d.report(
148 DiagnosticKind::StructDoesNotHaveField {
149 type_name: type_name.clone(),
150 field_name: field_name.clone(),
151 },
152 type_span,
153 );
154 None
155 } else {
156 Some(variant(
157 qualify_struct_var_name(&field_name, &qualified_var_name),
158 type_.clone(),
159 ))
160 }
161 }
162 },
163 }
164 }
165
166 pub fn qualify_name(&self, d: D, name: &Name) -> Option<QualifiedName> {
167 let basename = name.basename();

Callers 1

qualify_nameMethod · 0.80

Calls 3

qualify_struct_var_nameFunction · 0.85
reportMethod · 0.80
get_structMethod · 0.45

Tested by

no test coverage detected