Skip to content

Commit 895d4fd

Browse files
author
Robert Holt
committed
More code cleanup
1 parent 03fc2bd commit 895d4fd

File tree

1 file changed

+49
-46
lines changed

1 file changed

+49
-46
lines changed

Engine/Helper.cs

Lines changed: 49 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,20 @@ public class Helper
2828

2929
private readonly CommandInvocationIntrinsics _invokeCommand;
3030

31+
private readonly Lazy<CommandInfoCache> _commandInfoCache;
32+
3133
private Dictionary<string, Dictionary<string, object>> _ruleArguments;
3234

3335
private PSVersionTable _psVersionTable;
3436

35-
private Lazy<CommandInfoCache> _commandInfoCache;
36-
3737
private CommandInfoCache CommandInfoCache => _commandInfoCache.Value;
3838

3939
#endregion
4040

4141
#region Singleton
42-
private static object syncRoot = new Object();
42+
private static readonly object s_syncRoot = new object();
4343

44-
private static Helper instance;
44+
private static Helper s_instance;
4545

4646
/// <summary>
4747
/// The helper instance that handles utility functions
@@ -50,20 +50,20 @@ public static Helper Instance
5050
{
5151
get
5252
{
53-
if (instance == null)
53+
if (s_instance == null)
5454
{
5555
Instance = new Helper();
5656
}
5757

58-
return instance;
58+
return s_instance;
5959
}
6060
internal set
6161
{
62-
lock (syncRoot)
62+
lock (s_syncRoot)
6363
{
64-
if (instance == null)
64+
if (s_instance == null)
6565
{
66-
instance = value;
66+
s_instance = value;
6767
}
6868
}
6969
}
@@ -76,14 +76,14 @@ internal set
7676
/// <summary>
7777
/// Dictionary contains mapping of cmdlet to alias
7878
/// </summary>
79-
private Dictionary<String, List<String>> CmdletToAliasDictionary;
79+
private readonly Dictionary<string, List<string>> _cmdletToAliasDictionary;
8080

8181
/// <summary>
8282
/// Dictionary contains mapping of alias to cmdlet
8383
/// </summary>
84-
private Dictionary<String, String> AliasToCmdletDictionary;
84+
private readonly Dictionary<string, string> _aliasToCmdletDictionary;
8585

86-
internal TupleComparer tupleComparer = new TupleComparer();
86+
internal TupleComparer TupleComparer { get; } = new TupleComparer();
8787

8888
/// <summary>
8989
/// My Tokens
@@ -96,24 +96,30 @@ internal set
9696
/// the starting position of the open curly brace and the second item
9797
/// is the closing position of the closing curly brace.
9898
/// </summary>
99-
private Dictionary<String, List<Tuple<int, int>>> KeywordBlockDictionary;
99+
private readonly Dictionary<string, List<Tuple<int, int>>> _keywordBlockDictionary;
100100

101101
/// <summary>
102102
/// Key of dictionary is ast, value is the corresponding variableanalysis
103103
/// </summary>
104-
private Dictionary<Ast, VariableAnalysis> VariableAnalysisDictionary;
104+
private readonly Dictionary<Ast, VariableAnalysis> VariableAnalysisDictionary;
105+
106+
private readonly IReadOnlyList<string> functionScopes = new string[] { "global:", "local:", "script:", "private:"};
105107

106-
private string[] functionScopes = new string[] { "global:", "local:", "script:", "private:"};
108+
private readonly IReadOnlyList<string> variableScopes = new string[] { "global:", "local:", "script:", "private:", "variable:", ":"};
107109

108-
private string[] variableScopes = new string[] { "global:", "local:", "script:", "private:", "variable:", ":"};
109110
#endregion
110111

111112
/// <summary>
112113
/// Initializes the Helper class.
113114
/// </summary>
114115
private Helper()
115116
{
116-
117+
_ruleArguments = new Dictionary<string, Dictionary<string, object>>(StringComparer.OrdinalIgnoreCase);
118+
_commandInfoCache = new Lazy<CommandInfoCache>(() => new CommandInfoCache());
119+
_cmdletToAliasDictionary = new Dictionary<string, List<string>>(StringComparer.OrdinalIgnoreCase);
120+
_aliasToCmdletDictionary = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
121+
_keywordBlockDictionary = new Dictionary<string, List<Tuple<int, int>>>(StringComparer.OrdinalIgnoreCase);
122+
VariableAnalysisDictionary = new Dictionary<Ast, VariableAnalysis>();
117123
}
118124

119125
/// <summary>
@@ -123,37 +129,34 @@ private Helper()
123129
/// A CommandInvocationIntrinsics instance for use in gathering
124130
/// information about available commands and aliases.
125131
/// </param>
126-
public Helper(CommandInvocationIntrinsics invokeCommand)
132+
public Helper(CommandInvocationIntrinsics invokeCommand) : base()
127133
{
128134
_invokeCommand = invokeCommand;
129-
_ruleArguments = new Dictionary<string, Dictionary<string, object>>(StringComparer.OrdinalIgnoreCase);
130-
_commandInfoCache = new Lazy<CommandInfoCache>(() => new CommandInfoCache());
131-
CmdletToAliasDictionary = new Dictionary<string, List<string>>(StringComparer.OrdinalIgnoreCase);
132-
AliasToCmdletDictionary = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
133-
KeywordBlockDictionary = new Dictionary<string, List<Tuple<int, int>>>(StringComparer.OrdinalIgnoreCase);
134-
VariableAnalysisDictionary = new Dictionary<Ast, VariableAnalysis>();
135135
}
136136

137137
#region Methods
138138
/// <summary>
139-
/// Initialize : Initializes dictionary of alias.
139+
/// Creates the alias dictionary from the current PowerShell session.
140140
/// </summary>
141141
public void Initialize()
142142
{
143-
IEnumerable<CommandInfo> aliases = _invokeCommand.GetCommands("*", CommandTypes.Alias, nameIsPattern: true);
144-
145-
foreach (AliasInfo aliasInfo in aliases)
143+
if (_invokeCommand != null)
146144
{
147-
if (!CmdletToAliasDictionary.ContainsKey(aliasInfo.Definition))
148-
{
149-
CmdletToAliasDictionary.Add(aliasInfo.Definition, new List<string>() { aliasInfo.Name });
150-
}
151-
else
145+
IEnumerable<CommandInfo> aliases = _invokeCommand.GetCommands("*", CommandTypes.Alias, nameIsPattern: true);
146+
147+
foreach (AliasInfo aliasInfo in aliases)
152148
{
153-
CmdletToAliasDictionary[aliasInfo.Definition].Add(aliasInfo.Name);
154-
}
149+
if (!_cmdletToAliasDictionary.ContainsKey(aliasInfo.Definition))
150+
{
151+
_cmdletToAliasDictionary.Add(aliasInfo.Definition, new List<string>() { aliasInfo.Name });
152+
}
153+
else
154+
{
155+
_cmdletToAliasDictionary[aliasInfo.Definition].Add(aliasInfo.Name);
156+
}
155157

156-
AliasToCmdletDictionary.Add(aliasInfo.Name, aliasInfo.Definition);
158+
_aliasToCmdletDictionary.Add(aliasInfo.Name, aliasInfo.Definition);
159+
}
157160
}
158161
}
159162

@@ -221,9 +224,9 @@ public List<String> CmdletNameAndAliases(String Cmdlet)
221224
List<String> results = new List<String>();
222225
results.Add(Cmdlet);
223226

224-
if (CmdletToAliasDictionary.ContainsKey(Cmdlet))
227+
if (_cmdletToAliasDictionary.ContainsKey(Cmdlet))
225228
{
226-
results.AddRange(CmdletToAliasDictionary[Cmdlet]);
229+
results.AddRange(_cmdletToAliasDictionary[Cmdlet]);
227230
}
228231

229232
return results;
@@ -236,9 +239,9 @@ public List<String> CmdletNameAndAliases(String Cmdlet)
236239
/// <returns></returns>
237240
public string GetCmdletNameFromAlias(String Alias)
238241
{
239-
if (AliasToCmdletDictionary.ContainsKey(Alias))
242+
if (_aliasToCmdletDictionary.ContainsKey(Alias))
240243
{
241-
return AliasToCmdletDictionary[Alias];
244+
return _aliasToCmdletDictionary[Alias];
242245
}
243246

244247
return String.Empty;
@@ -525,7 +528,7 @@ item is TypeDefinitionAst
525528
return false;
526529
}
527530

528-
private string NameWithoutScope(string name, string[] scopes)
531+
private string NameWithoutScope(string name, IReadOnlyList<string> scopes)
529532
{
530533
if (String.IsNullOrWhiteSpace(name) || scopes == null)
531534
{
@@ -765,14 +768,14 @@ public bool SkipBlock(string keyword, Ast namedBlockAst)
765768

766769
FindClosingParenthesis(keyword);
767770

768-
List<Tuple<int, int>> listTuples = KeywordBlockDictionary[keyword];
771+
List<Tuple<int, int>> listTuples = _keywordBlockDictionary[keyword];
769772

770773
if (listTuples == null || listTuples.Count == 0)
771774
{
772775
return false;
773776
}
774777

775-
int index = listTuples.BinarySearch(Tuple.Create(namedBlockAst.Extent.StartOffset, namedBlockAst.Extent.EndOffset), tupleComparer);
778+
int index = listTuples.BinarySearch(Tuple.Create(namedBlockAst.Extent.StartOffset, namedBlockAst.Extent.EndOffset), TupleComparer);
776779

777780
if (index < 0 || index >= Tokens.Length)
778781
{
@@ -828,12 +831,12 @@ private void FindClosingParenthesis(string keyword)
828831
}
829832

830833
// Only do this one time per script. The keywordblockdictionary is cleared everytime we run a new script
831-
if (KeywordBlockDictionary.ContainsKey(keyword))
834+
if (_keywordBlockDictionary.ContainsKey(keyword))
832835
{
833836
return;
834837
}
835838

836-
KeywordBlockDictionary[keyword] = new List<Tuple<int, int>>();
839+
_keywordBlockDictionary[keyword] = new List<Tuple<int, int>>();
837840

838841
int[] tokenIndices = Tokens
839842
.Select((token, index) =>
@@ -888,7 +891,7 @@ private void FindClosingParenthesis(string keyword)
888891
continue;
889892
}
890893

891-
KeywordBlockDictionary[keyword].Add(Tuple.Create(Tokens[openCurly].Extent.StartOffset,
894+
_keywordBlockDictionary[keyword].Add(Tuple.Create(Tokens[openCurly].Extent.StartOffset,
892895
Tokens[closeCurly].Extent.EndOffset));
893896
}
894897
}

0 commit comments

Comments
 (0)