@@ -12,10 +12,11 @@ pub fn qualify_name(expression_type: &ExpressionType, name: Name) -> Result<Name
1212 try_qualify ( name, expr_q) . map_err ( |_| LintError :: TypeMismatch )
1313 }
1414 None => {
15- match name {
15+ if name. is_bare ( ) {
16+ Ok ( name)
17+ } else {
1618 // trying to use a qualifier on an ExpressionType that doesn't accept it
17- Name :: Qualified ( _, _) => Err ( LintError :: TypeMismatch ) ,
18- _ => Ok ( name) ,
19+ Err ( LintError :: TypeMismatch )
1920 }
2021 }
2122 }
@@ -24,10 +25,10 @@ pub fn qualify_name(expression_type: &ExpressionType, name: Name) -> Result<Name
2425/// Tries to convert this name into a qualified name.
2526/// Fails if the name is already qualified with a different qualifier.
2627pub fn try_qualify ( name : Name , qualifier : TypeQualifier ) -> Result < Name , LintError > {
27- match name {
28- Name :: Bare ( bare_name ) => Ok ( Name :: Qualified ( bare_name , qualifier ) ) ,
29- Name :: Qualified ( _ , q ) if q != qualifier => Err ( LintError :: DuplicateDefinition ) ,
30- _ => Ok ( name) ,
28+ match name. qualifier ( ) {
29+ Some ( q ) if q != qualifier => Err ( LintError :: DuplicateDefinition ) ,
30+ Some ( _ ) => Ok ( name ) ,
31+ None => Ok ( Name :: qualified ( name. into ( ) , qualifier ) ) ,
3132 }
3233}
3334
@@ -60,29 +61,17 @@ pub fn try_built_in_function(n: &Name) -> Result<Option<BuiltInFunction>, LintEr
6061 | BuiltInFunction :: Space
6162 | BuiltInFunction :: UCase => {
6263 // ENVIRON$ must be qualified
63- match n {
64- Name :: Bare ( _) => Err ( LintError :: TypeMismatch ) ,
65- Name :: Qualified ( _, qualifier) => {
66- if * qualifier == TypeQualifier :: DollarString {
67- Ok ( Some ( b) )
68- } else {
69- Err ( LintError :: TypeMismatch )
70- }
71- }
64+ match n. qualifier ( ) {
65+ Some ( TypeQualifier :: DollarString ) => Ok ( Some ( b) ) ,
66+ _ => Err ( LintError :: TypeMismatch ) ,
7267 }
7368 }
7469 BuiltInFunction :: Chr | BuiltInFunction :: Str | BuiltInFunction :: String => {
7570 // STR$ or otherwise it's undefined
76- match n {
77- // confirmed that even with DEFSTR A-Z it won't work as unqualified
78- Name :: Bare ( _) => Ok ( None ) ,
79- Name :: Qualified ( _, qualifier) => {
80- if * qualifier == TypeQualifier :: DollarString {
81- Ok ( Some ( b) )
82- } else {
83- Ok ( None )
84- }
85- }
71+ // confirmed that even with DEFSTR A-Z it won't work as unqualified
72+ match n. qualifier ( ) {
73+ Some ( TypeQualifier :: DollarString ) => Ok ( Some ( b) ) ,
74+ _ => Ok ( None ) ,
8675 }
8776 }
8877 } ,
@@ -94,8 +83,9 @@ fn demand_unqualified(
9483 built_in : BuiltInFunction ,
9584 n : & Name ,
9685) -> Result < Option < BuiltInFunction > , LintError > {
97- match n {
98- Name :: Bare ( _) => Ok ( Some ( built_in) ) ,
99- _ => Err ( LintError :: TypeMismatch ) ,
86+ if n. is_bare ( ) {
87+ Ok ( Some ( built_in) )
88+ } else {
89+ Err ( LintError :: TypeMismatch )
10090 }
10191}
0 commit comments