Skip to content

Commit 033b214

Browse files
committed
Merge branch 'next' of https://github.com/rubberduck-vba/Rubberduck into next
2 parents 5df4d9c + e2c1d6c commit 033b214

File tree

371 files changed

+9287
-3016
lines changed

Some content is hidden

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

371 files changed

+9287
-3016
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ If you like this project and would like to thank its contributors, you are welco
3737

3838
Rubberduck is a COM add-in for the VBA IDE (VBE).
3939

40-
Copyright (C) 2014-2018 Mathieu Guindon & Christopher McClellan
40+
Copyright (C) 2014-2018 Rubberduck project contributors
4141

4242
This program is free software: you can redistribute it and/or modify
4343
it under the terms of the GNU General Public License as published by

Rubberduck.API/VBA/Parser.cs

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,27 @@
44
using System.Globalization;
55
using System.Linq;
66
using System.Runtime.InteropServices;
7+
using System.Threading;
78
using Rubberduck.Common;
89
using Rubberduck.Parsing.PreProcessing;
10+
using Rubberduck.Parsing.Rewriter;
911
using Rubberduck.Parsing.Symbols.DeclarationLoaders;
1012
using Rubberduck.Parsing.VBA;
1113
using Rubberduck.Parsing.Symbols;
14+
using Rubberduck.Parsing.Symbols.ParsingExceptions;
1215
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;
1320
using Rubberduck.Resources.Registration;
1421
using Rubberduck.VBEditor.ComManagement;
1522
using Rubberduck.VBEditor.Events;
1623
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1724
using Rubberduck.VBEditor.Utility;
1825
using Rubberduck.Root;
26+
using Rubberduck.VBEditor.ComManagement.TypeLibs;
27+
using Rubberduck.VBEditor.SourceCodeHandling;
1928

2029
namespace Rubberduck.API.VBA
2130
{
@@ -59,16 +68,17 @@ public interface IParserEvents
5968
public sealed class Parser : IParser, IDisposable
6069
{
6170
private RubberduckParserState _state;
62-
private AttributeParser _attributeParser;
63-
private ParseCoordinator _parser;
71+
private SynchronousParseCoordinator _parser;
6472
private IVBE _vbe;
6573
private IVBEEvents _vbeEvents;
6674
private readonly IUiDispatcher _dispatcher;
75+
private readonly CancellationTokenSource _tokenSource;
6776

6877
internal Parser()
6978
{
7079
UiContextProvider.Initialize();
7180
_dispatcher = new UiDispatcher(UiContextProvider.Instance());
81+
_tokenSource = new CancellationTokenSource();
7282
}
7383

7484
// vbe is the com coclass interface from the interop assembly.
@@ -87,10 +97,20 @@ internal Parser(object vbe) : this()
8797
_state = new RubberduckParserState(_vbe, projectRepository, declarationFinderFactory, _vbeEvents);
8898
_state.StateChanged += _state_StateChanged;
8999

90-
var sourceCodeHandler = _vbe.SourceCodeHandler;
91-
92-
IVBAPreprocessor preprocessorFactory() => new VBAPreprocessor(double.Parse(_vbe.Version, CultureInfo.InvariantCulture));
93-
_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);
94114
var projectManager = new RepositoryProjectManager(projectRepository);
95115
var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager();
96116
var parserStateManager = new ParserStateManager(_state);
@@ -108,12 +128,19 @@ internal Parser(object vbe) : this()
108128
//new RubberduckApiDeclarations(_state)
109129
}
110130
);
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);
111140
var parseRunner = new ParseRunner(
112141
_state,
113142
parserStateManager,
114-
preprocessorFactory,
115-
_attributeParser,
116-
sourceCodeHandler);
143+
moduleParser);
117144
var declarationResolveRunner = new DeclarationResolveRunner(
118145
_state,
119146
parserStateManager,
@@ -134,25 +161,25 @@ internal Parser(object vbe) : this()
134161
_state,
135162
moduleToModuleReferenceManager,
136163
referenceRemover,
137-
supertypeClearer
164+
supertypeClearer,
165+
compilationsArgumentsCache
138166
);
139167

140-
_parser = new ParseCoordinator(
168+
_parser = new SynchronousParseCoordinator(
141169
_state,
142170
parsingStageService,
143171
parsingCacheService,
144172
projectManager,
145173
parserStateManager
146174
);
147175
}
148-
176+
149177
/// <summary>
150178
/// Blocking call, for easier unit-test code
151179
/// </summary>
152180
public void Parse()
153181
{
154-
// blocking call
155-
_parser.Parse(new System.Threading.CancellationTokenSource());
182+
_parser.Parse(_tokenSource);
156183
}
157184

158185
/// <summary>
@@ -163,7 +190,7 @@ public void BeginParse()
163190
// non-blocking call
164191
_dispatcher.Invoke(() => _state.OnParseRequested(this));
165192
}
166-
193+
167194
public delegate void OnStateChangedDelegate(ParserState ParserState);
168195
public event OnStateChangedDelegate OnStateChanged;
169196

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/MultilineParameterInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
3030
.Select(context => new QualifiedContextInspectionResult(this,
3131
string.Format(context.Context.GetSelection().LineCount > 3
3232
? RubberduckUI.EasterEgg_Continuator
33-
: Resources.Inspections.InspectionResults.MultilineParameterInspection, ((VBAParser.ArgContext)context.Context).unrestrictedIdentifier().ToString()),
33+
: Resources.Inspections.InspectionResults.MultilineParameterInspection, ((VBAParser.ArgContext)context.Context).unrestrictedIdentifier().GetText()),
3434
context));
3535
}
3636

0 commit comments

Comments
 (0)