Skip to content

Commit e07df9d

Browse files
authored
Merge pull request #2834 from ThunderFrame/next
Treats Input, InputB and Array as native declarations
2 parents 612b9ed + 7912860 commit e07df9d

File tree

5 files changed

+137
-99
lines changed

5 files changed

+137
-99
lines changed

RetailCoder.VBE/Inspections/UntypedFunctionUsageInspection.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public UntypedFunctionUsageInspection(RubberduckParserState state)
3030
Tokens.Chr,
3131
Tokens.ChrW,
3232
Tokens.Format,
33+
Tokens.Input,
34+
Tokens.InputB,
3335
Tokens.LCase,
3436
Tokens.Left,
3537
Tokens.LeftB,

Rubberduck.Parsing/Grammar/Tokens.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public static class Tokens
8686
public static readonly string Implements = "Implements";
8787
public static readonly string In = "In";
8888
public static readonly string Input = "Input";
89+
public static readonly string InputB = "InputB";
8990
public static readonly string InputBox = "InputBox";
9091
public static readonly string InStr = "InStr";
9192
public static readonly string Int = "Int";
@@ -192,6 +193,7 @@ public static class Tokens
192193
public static readonly string WeekDay = "WeekDay";
193194
public static readonly string Wend = "Wend";
194195
public static readonly string While = "While";
196+
public static readonly string Width = "Width";
195197
public static readonly string With = "With";
196198
public static readonly string Write = "Write";
197199
public static readonly string XOr = "Xor";

Rubberduck.Parsing/Symbols/DeclarationLoaders/AliasDeclarations.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class AliasDeclarations : ICustomDeclarationLoader
1515
private Declaration _interactionModule;
1616
private Declaration _stringsModule;
1717
private Declaration _dateTimeModule;
18+
private Declaration _hiddenModule;
1819

1920
public AliasDeclarations(RubberduckParserState state)
2021
{
@@ -53,6 +54,8 @@ public IReadOnlyList<Declaration> Load()
5354
Grammar.Tokens.UCase,
5455
Grammar.Tokens.Date,
5556
Grammar.Tokens.Time,
57+
Grammar.Tokens.Input,
58+
Grammar.Tokens.InputB
5659
};
5760

5861
private IReadOnlyList<Declaration> AddAliasDeclarations()
@@ -93,6 +96,7 @@ private void UpdateAliasFunctionModulesFromReferencedProjects(DeclarationFinder
9396
_interactionModule = finder.FindStdModule("Interaction", vba, true);
9497
_stringsModule = finder.FindStdModule("Strings", vba, true);
9598
_dateTimeModule = finder.FindStdModule("DateTime", vba, true);
99+
_hiddenModule = finder.FindStdModule("_HiddenModule", vba, true);
96100
}
97101

98102

@@ -197,6 +201,8 @@ private List<FunctionDeclaration> FunctionAliasesWithoutParameters()
197201
RTrimFunction(),
198202
StringFunction(),
199203
UCaseFunction(),
204+
InputFunction(),
205+
InputBFunction(),
200206
};
201207
}
202208

@@ -614,6 +620,42 @@ private FunctionDeclaration UCaseFunction()
614620
new Attributes());
615621
}
616622

623+
private FunctionDeclaration InputFunction()
624+
{
625+
return new FunctionDeclaration(
626+
new QualifiedMemberName(_hiddenModule.QualifiedName.QualifiedModuleName, "Input"),
627+
_hiddenModule,
628+
_hiddenModule,
629+
"Variant",
630+
null,
631+
string.Empty,
632+
Accessibility.Global,
633+
null,
634+
new Selection(),
635+
false,
636+
true,
637+
new List<IAnnotation>(),
638+
new Attributes());
639+
}
640+
641+
private FunctionDeclaration InputBFunction()
642+
{
643+
return new FunctionDeclaration(
644+
new QualifiedMemberName(_hiddenModule.QualifiedName.QualifiedModuleName, "InputB"),
645+
_hiddenModule,
646+
_hiddenModule,
647+
"Variant",
648+
null,
649+
string.Empty,
650+
Accessibility.Global,
651+
null,
652+
new Selection(),
653+
false,
654+
true,
655+
new List<IAnnotation>(),
656+
new Attributes());
657+
}
658+
617659
private static void AddParametersToAliasesFromReferencedFunctions(List<FunctionDeclaration> functionAliases, List<Declaration> referencedFunctions)
618660
{
619661
foreach (var alias in functionAliases)

Rubberduck.Parsing/Symbols/DeclarationLoaders/SpecialFormDeclarations.cs

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -63,111 +63,15 @@ private List<Declaration> LoadSpecialFormDeclarations(Declaration parentModule)
6363
{
6464
Debug.Assert(parentModule != null);
6565

66-
var arrayFunction = ArrayFunction(parentModule);
67-
var inputFunction = InputFunction(parentModule);
68-
var inputBFunction = InputBFunction(parentModule);
6966
var lboundFunction = LBoundFunction(parentModule);
7067
var uboundFunction = UBoundFunction(parentModule);
7168

7269
return new List<Declaration> {
73-
arrayFunction,
74-
inputFunction,
75-
inputBFunction,
7670
lboundFunction,
7771
uboundFunction
7872
};
7973
}
8074

81-
private static FunctionDeclaration ArrayFunction(Declaration parentModule)
82-
{
83-
return new FunctionDeclaration(
84-
new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Array"),
85-
parentModule,
86-
parentModule,
87-
"Variant",
88-
null,
89-
null,
90-
Accessibility.Public,
91-
null,
92-
Selection.Home,
93-
false,
94-
true,
95-
null,
96-
new Attributes());
97-
}
98-
99-
private static SubroutineDeclaration InputFunction(Declaration parentModule)
100-
{
101-
var inputFunction = InputFunctionWithoutParameters(parentModule);
102-
inputFunction.AddParameter(NumberParameter(parentModule, inputFunction));
103-
inputFunction.AddParameter(FileNumberParameter(parentModule, inputFunction));
104-
return inputFunction;
105-
}
106-
107-
private static SubroutineDeclaration InputFunctionWithoutParameters(Declaration parentModule)
108-
{
109-
return new SubroutineDeclaration(
110-
new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Input"),
111-
parentModule,
112-
parentModule,
113-
"Variant",
114-
Accessibility.Public,
115-
null,
116-
Selection.Home,
117-
true,
118-
null,
119-
new Attributes());
120-
}
121-
122-
private static ParameterDeclaration NumberParameter(Declaration parentModule, SubroutineDeclaration ParentSubroutine)
123-
{
124-
return new ParameterDeclaration(
125-
new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Number"),
126-
ParentSubroutine,
127-
"Integer",
128-
null,
129-
null,
130-
false,
131-
false);
132-
}
133-
134-
private static ParameterDeclaration FileNumberParameter(Declaration parentModule, SubroutineDeclaration ParentSubroutine)
135-
{
136-
return new ParameterDeclaration(
137-
new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Filenumber"),
138-
ParentSubroutine,
139-
"Integer",
140-
null,
141-
null,
142-
false,
143-
false);
144-
}
145-
146-
147-
private static SubroutineDeclaration InputBFunction(Declaration parentModule)
148-
{
149-
var inputBFunction = InputBFunctionWithoutParameters(parentModule);
150-
inputBFunction.AddParameter(NumberParameter(parentModule, inputBFunction));
151-
inputBFunction.AddParameter(FileNumberParameter(parentModule, inputBFunction));
152-
return inputBFunction;
153-
}
154-
155-
private static SubroutineDeclaration InputBFunctionWithoutParameters(Declaration parentModule)
156-
{
157-
return new SubroutineDeclaration(
158-
new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "InputB"),
159-
parentModule,
160-
parentModule,
161-
"Variant",
162-
Accessibility.Public,
163-
null,
164-
Selection.Home,
165-
true,
166-
null,
167-
new Attributes());
168-
}
169-
170-
17175
private static FunctionDeclaration LBoundFunction(Declaration parentModule)
17276
{
17377
var lboundFunction = LBoundFunctionWithoutParameters(parentModule);

RubberduckTests/Inspections/UntypedFunctionUsageInspectionTests.cs

Lines changed: 91 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,15 @@ private List<Declaration> GetBuiltInDeclarations()
252252
new List<IAnnotation>(),
253253
new Attributes());
254254

255+
var hiddenModule = new ProceduralModuleDeclaration(
256+
new QualifiedMemberName(new QualifiedModuleName("VBA", MockVbeBuilder.LibraryPathVBA, "_HiddenModule"), "_HiddenModule"),
257+
vbaDeclaration,
258+
"_HiddenModule",
259+
true,
260+
new List<IAnnotation>(),
261+
new Attributes());
262+
263+
255264
var commandFunction = new FunctionDeclaration(
256265
new QualifiedMemberName(interactionModule.QualifiedName.QualifiedModuleName, "_B_var_Command"),
257266
interactionModule,
@@ -590,7 +599,7 @@ private List<Declaration> GetBuiltInDeclarations()
590599

591600
var firstMidParam = new ParameterDeclaration(
592601
new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "String"),
593-
midbFunction,
602+
midFunction,
594603
"Variant",
595604
null,
596605
null,
@@ -599,7 +608,7 @@ private List<Declaration> GetBuiltInDeclarations()
599608

600609
var secondMidParam = new ParameterDeclaration(
601610
new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "Start"),
602-
midbFunction,
611+
midFunction,
603612
"Long",
604613
null,
605614
null,
@@ -715,6 +724,78 @@ private List<Declaration> GetBuiltInDeclarations()
715724
new List<IAnnotation>(),
716725
new Attributes());
717726

727+
var inputbFunction = new FunctionDeclaration(
728+
new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "_B_var_InputB"),
729+
hiddenModule,
730+
hiddenModule,
731+
"Variant",
732+
null,
733+
null,
734+
Accessibility.Global,
735+
null,
736+
Selection.Home,
737+
false,
738+
true,
739+
new List<IAnnotation>(),
740+
new Attributes());
741+
742+
var firstInputBParam = new ParameterDeclaration(
743+
new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "Number"),
744+
inputbFunction,
745+
"Long",
746+
null,
747+
null,
748+
false,
749+
true);
750+
751+
var secondInputBParam = new ParameterDeclaration(
752+
new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "FileNumber"),
753+
inputbFunction,
754+
"Integer",
755+
null,
756+
null,
757+
false,
758+
true);
759+
760+
inputbFunction.AddParameter(firstInputBParam);
761+
inputbFunction.AddParameter(secondInputBParam);
762+
763+
var inputFunction = new FunctionDeclaration(
764+
new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "_B_var_Input"),
765+
hiddenModule,
766+
hiddenModule,
767+
"Variant",
768+
null,
769+
null,
770+
Accessibility.Global,
771+
null,
772+
Selection.Home,
773+
false,
774+
true,
775+
new List<IAnnotation>(),
776+
new Attributes());
777+
778+
var firstInputParam = new ParameterDeclaration(
779+
new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "Number"),
780+
inputFunction,
781+
"Long",
782+
null,
783+
null,
784+
false,
785+
true);
786+
787+
var secondInputParam = new ParameterDeclaration(
788+
new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "FileNumber"),
789+
inputFunction,
790+
"Integer",
791+
null,
792+
null,
793+
false,
794+
true);
795+
796+
inputFunction.AddParameter(firstInputParam);
797+
inputFunction.AddParameter(secondInputParam);
798+
718799
return new List<Declaration>
719800
{
720801
vbaDeclaration,
@@ -723,6 +804,7 @@ private List<Declaration> GetBuiltInDeclarations()
723804
interactionModule,
724805
stringsModule,
725806
dateTimeModule,
807+
hiddenModule,
726808
commandFunction,
727809
environFunction,
728810
rtrimFunction,
@@ -756,7 +838,13 @@ private List<Declaration> GetBuiltInDeclarations()
756838
strFunction,
757839
curDirFunction,
758840
datePropertyGet,
759-
timePropertyGet
841+
timePropertyGet,
842+
inputbFunction,
843+
firstInputBParam,
844+
secondInputBParam,
845+
inputFunction,
846+
firstInputParam,
847+
secondInputParam
760848
};
761849
}
762850
}

0 commit comments

Comments
 (0)