Skip to content

Commit 1cf6e0f

Browse files
authored
Merge pull request #4242 from MDoerner/RefactorTheParser
Refactor the Parser
2 parents 9875db3 + 64a5996 commit 1cf6e0f

File tree

181 files changed

+2529
-1369
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

181 files changed

+2529
-1369
lines changed

Rubberduck.API/VBA/Parser.cs

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,24 @@
77
using System.Threading;
88
using Rubberduck.Common;
99
using Rubberduck.Parsing.PreProcessing;
10+
using Rubberduck.Parsing.Rewriter;
1011
using Rubberduck.Parsing.Symbols.DeclarationLoaders;
1112
using Rubberduck.Parsing.VBA;
1213
using Rubberduck.Parsing.Symbols;
14+
using Rubberduck.Parsing.Symbols.ParsingExceptions;
1315
using Rubberduck.Parsing.UIContext;
16+
using Rubberduck.Parsing.VBA.ComReferenceLoading;
17+
using Rubberduck.Parsing.VBA.DeclarationResolving;
18+
using Rubberduck.Parsing.VBA.Parsing;
19+
using Rubberduck.Parsing.VBA.ReferenceManagement;
1420
using Rubberduck.Resources.Registration;
1521
using Rubberduck.VBEditor.ComManagement;
1622
using Rubberduck.VBEditor.Events;
1723
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1824
using Rubberduck.VBEditor.Utility;
1925
using Rubberduck.Root;
26+
using Rubberduck.VBEditor.ComManagement.TypeLibs;
27+
using Rubberduck.VBEditor.SourceCodeHandling;
2028

2129
namespace Rubberduck.API.VBA
2230
{
@@ -60,7 +68,6 @@ public interface IParserEvents
6068
public sealed class Parser : IParser, IDisposable
6169
{
6270
private RubberduckParserState _state;
63-
private AttributeParser _attributeParser;
6471
private SynchronousParseCoordinator _parser;
6572
private IVBE _vbe;
6673
private IVBEEvents _vbeEvents;
@@ -90,10 +97,20 @@ internal Parser(object vbe) : this()
9097
_state = new RubberduckParserState(_vbe, projectRepository, declarationFinderFactory, _vbeEvents);
9198
_state.StateChanged += _state_StateChanged;
9299

93-
var sourceCodeHandler = _vbe.SourceCodeHandler;
94-
95-
IVBAPreprocessor preprocessorFactory() => new VBAPreprocessor(double.Parse(_vbe.Version, CultureInfo.InvariantCulture));
96-
_attributeParser = new AttributeParser(sourceCodeHandler, preprocessorFactory, _state.ProjectsProvider);
100+
var sourceFileHandler = _vbe.SourceFileHandler;
101+
var vbeVersion = double.Parse(_vbe.Version, CultureInfo.InvariantCulture);
102+
var predefinedCompilationConstants = new VBAPredefinedCompilationConstants(vbeVersion);
103+
var typeLibProvider = new TypeLibWrapperProvider(projectRepository);
104+
var compilationArgumentsProvider = new CompilationArgumentsProvider(typeLibProvider, _dispatcher, predefinedCompilationConstants);
105+
var compilationsArgumentsCache = new CompilationArgumentsCache(compilationArgumentsProvider);
106+
var preprocessorErrorListenerFactory = new PreprocessingParseErrorListenerFactory();
107+
var preprocessorParser = new VBAPreprocessorParser(preprocessorErrorListenerFactory, preprocessorErrorListenerFactory);
108+
var preprocessor = new VBAPreprocessor(preprocessorParser, compilationsArgumentsCache);
109+
var mainParseErrorListenerFactory = new MainParseErrorListenerFactory();
110+
var mainTokenStreamParser = new VBATokenStreamParser(mainParseErrorListenerFactory, mainParseErrorListenerFactory);
111+
var tokenStreamProvider = new SimpleVBAModuleTokenStreamProvider();
112+
var stringParser = new TokenStreamParserStringParserAdapterWithPreprocessing(tokenStreamProvider, mainTokenStreamParser, preprocessor);
113+
var attributesSourceCodeHandler = new SourceFileHandlerSourceCodeHandlerAdapter(sourceFileHandler, projectRepository);
97114
var projectManager = new RepositoryProjectManager(projectRepository);
98115
var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager();
99116
var parserStateManager = new ParserStateManager(_state);
@@ -111,12 +128,19 @@ internal Parser(object vbe) : this()
111128
//new RubberduckApiDeclarations(_state)
112129
}
113130
);
131+
var codePaneSourceCodeHandler = new CodePaneSourceCodeHandler(projectRepository);
132+
var moduleRewriterFactory = new ModuleRewriterFactory(
133+
codePaneSourceCodeHandler,
134+
attributesSourceCodeHandler);
135+
var moduleParser = new ModuleParser(
136+
codePaneSourceCodeHandler,
137+
attributesSourceCodeHandler,
138+
stringParser,
139+
moduleRewriterFactory);
114140
var parseRunner = new ParseRunner(
115141
_state,
116142
parserStateManager,
117-
preprocessorFactory,
118-
_attributeParser,
119-
sourceCodeHandler);
143+
moduleParser);
120144
var declarationResolveRunner = new DeclarationResolveRunner(
121145
_state,
122146
parserStateManager,
@@ -137,7 +161,8 @@ internal Parser(object vbe) : this()
137161
_state,
138162
moduleToModuleReferenceManager,
139163
referenceRemover,
140-
supertypeClearer
164+
supertypeClearer,
165+
compilationsArgumentsCache
141166
);
142167

143168
_parser = new SynchronousParseCoordinator(

Rubberduck.CodeAnalysis/Inspections/Abstract/ParseTreeInspectionBase.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Rubberduck.Parsing.Inspections.Abstract;
22
using Rubberduck.Parsing.VBA;
3+
using Rubberduck.Parsing.VBA.Parsing;
34

45
namespace Rubberduck.Inspections.Abstract
56
{
@@ -9,6 +10,6 @@ protected ParseTreeInspectionBase(RubberduckParserState state)
910
: base(state) { }
1011

1112
public abstract IInspectionListener Listener { get; }
12-
public virtual ParsePass Pass => ParsePass.CodePanePass;
13+
public virtual CodeKind TargetKindOfCode => CodeKind.CodePaneCode;
1314
}
1415
}

Rubberduck.CodeAnalysis/Inspections/Abstract/QuickFixBase.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using NLog;
55
using Rubberduck.Parsing.Inspections.Abstract;
66
using Rubberduck.Parsing.VBA;
7+
using Rubberduck.Parsing.VBA.Extensions;
78

89
namespace Rubberduck.Inspections.Abstract
910
{

Rubberduck.CodeAnalysis/Inspections/Concrete/EmptyModuleInspection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Rubberduck.Resources.Inspections;
88
using Rubberduck.Parsing.Symbols;
99
using Rubberduck.Parsing.VBA;
10+
using Rubberduck.Parsing.VBA.Extensions;
1011
using Rubberduck.VBEditor.SafeComWrappers;
1112

1213
namespace Rubberduck.Inspections.Concrete

Rubberduck.CodeAnalysis/Inspections/Concrete/ImplicitByRefModifierInspection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Rubberduck.Parsing.Inspections.Abstract;
1010
using Rubberduck.Resources.Inspections;
1111
using Rubberduck.Parsing.VBA;
12+
using Rubberduck.Parsing.VBA.Extensions;
1213
using Rubberduck.VBEditor;
1314

1415
namespace Rubberduck.Inspections.Concrete

Rubberduck.CodeAnalysis/Inspections/Concrete/IntegerDataTypeInspection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Rubberduck.Parsing.Inspections.Abstract;
99
using Rubberduck.Parsing.Symbols;
1010
using Rubberduck.Parsing.VBA;
11+
using Rubberduck.Parsing.VBA.Extensions;
1112
using Rubberduck.Resources;
1213

1314
namespace Rubberduck.Inspections.Concrete

Rubberduck.CodeAnalysis/Inspections/Concrete/MissingAnnotationArgumentInspection.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Rubberduck.Parsing.Inspections.Abstract;
1010
using Rubberduck.Resources.Inspections;
1111
using Rubberduck.Parsing.VBA;
12+
using Rubberduck.Parsing.VBA.Parsing;
1213
using Rubberduck.VBEditor;
1314

1415
namespace Rubberduck.Inspections.Concrete
@@ -18,7 +19,7 @@ public sealed class MissingAnnotationArgumentInspection : ParseTreeInspectionBas
1819
public MissingAnnotationArgumentInspection(RubberduckParserState state)
1920
: base(state) { }
2021

21-
public override ParsePass Pass => ParsePass.AttributesPass;
22+
public override CodeKind TargetKindOfCode => CodeKind.AttributesCode;
2223

2324
public override IInspectionListener Listener { get; } =
2425
new InvalidAnnotationStatementListener();

Rubberduck.CodeAnalysis/Inspections/Concrete/MissingAttributeInspection.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using Rubberduck.Resources.Inspections;
1212
using Rubberduck.Parsing.Symbols;
1313
using Rubberduck.Parsing.VBA;
14+
using Rubberduck.Parsing.VBA.Parsing;
1415

1516
namespace Rubberduck.Inspections.Concrete
1617
{
@@ -23,7 +24,7 @@ public MissingAttributeInspection(RubberduckParserState state)
2324
Listener = new MissingMemberAttributeListener(state);
2425
}
2526

26-
public override ParsePass Pass => ParsePass.AttributesPass;
27+
public override CodeKind TargetKindOfCode => CodeKind.AttributesCode;
2728

2829
public override IInspectionListener Listener { get; }
2930

Rubberduck.CodeAnalysis/Inspections/Concrete/ObsoleteCallStatementInspection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Rubberduck.Parsing.Inspections.Abstract;
99
using Rubberduck.Resources.Inspections;
1010
using Rubberduck.Parsing.VBA;
11+
using Rubberduck.Parsing.VBA.Extensions;
1112
using Rubberduck.VBEditor;
1213

1314
namespace Rubberduck.Inspections.Concrete

Rubberduck.CodeAnalysis/Inspections/Concrete/RedundantByRefModifierInspection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Rubberduck.Parsing.Inspections.Abstract;
1010
using Rubberduck.Resources.Inspections;
1111
using Rubberduck.Parsing.VBA;
12+
using Rubberduck.Parsing.VBA.Extensions;
1213
using Rubberduck.VBEditor;
1314

1415
namespace Rubberduck.Inspections.Concrete

0 commit comments

Comments
 (0)