Skip to content

Commit f45004e

Browse files
author
Kapil Borle
committed
Minor changes to FixUseToExportInManifestRule to improve performance.
1 parent 118d8ee commit f45004e

File tree

1 file changed

+57
-26
lines changed

1 file changed

+57
-26
lines changed

Rules/UseToExportFieldsInManifest.cs

Lines changed: 57 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,44 @@ private bool IsValidManifest(Ast ast, string fileName)
8484
return !missingManifestRule.AnalyzeScript(ast, fileName).GetEnumerator().MoveNext();
8585

8686
}
87+
88+
/// <summary>
89+
/// Checks if the ast contains wildcard character.
90+
/// </summary>
91+
/// <param name="ast"></param>
92+
/// <returns></returns>
93+
private bool HasWildcardInExpression(Ast ast)
94+
{
95+
var strConstExprAst = ast as StringConstantExpressionAst;
96+
if (strConstExprAst != null && WildcardPattern.ContainsWildcardCharacters(strConstExprAst.Value))
97+
{
98+
return true;
99+
}
100+
else
101+
{
102+
return false;
103+
}
104+
}
105+
106+
/// <summary>
107+
/// Checks if the ast contains null expression.
108+
/// </summary>
109+
/// <param name="ast"></param>
110+
/// <returns></returns>
111+
private bool HasNullInExpression(Ast ast)
112+
{
113+
var varExprAst = ast as VariableExpressionAst;
114+
if (varExprAst != null
115+
&& varExprAst.VariablePath.IsUnqualified
116+
&& varExprAst.VariablePath.UserPath.Equals("null", StringComparison.OrdinalIgnoreCase))
117+
{
118+
return true;
119+
}
120+
else
121+
{
122+
return false;
123+
}
124+
}
87125

88126
/// <summary>
89127
/// Checks if the *ToExport fields are explicitly set to arrays, eg. @(...), and the array entries do not contain any wildcard.
@@ -98,48 +136,41 @@ private bool HasAcceptableExportField(string key, HashtableAst hast, string scri
98136
extent = null;
99137
foreach (var pair in hast.KeyValuePairs)
100138
{
101-
102-
var keyStrConstAst = pair.Item1 is StringConstantExpressionAst ? pair.Item1 as StringConstantExpressionAst : null;
103-
139+
var keyStrConstAst = pair.Item1 as StringConstantExpressionAst;
104140
if (keyStrConstAst != null && keyStrConstAst.Value.Equals(key, StringComparison.OrdinalIgnoreCase))
105141
{
106142
// Checks for wildcard character in the entry.
107-
var strConstAstElements = from element in pair.Item2.FindAll(x => x is StringConstantExpressionAst, false)
108-
select element as StringConstantExpressionAst;
109-
var elementWithWildcard = strConstAstElements.FirstOrDefault(x => x != null
110-
&& WildcardPattern.ContainsWildcardCharacters(x.Value));
111-
112-
if (elementWithWildcard == null)
143+
var astWithWildcard = pair.Item2.Find(HasWildcardInExpression, false);
144+
if (astWithWildcard != null)
145+
{
146+
extent = astWithWildcard.Extent;
147+
return false;
148+
}
149+
else
113150
{
114151
// Checks for $null in the entry.
115-
var varAstElements = from element in pair.Item2.FindAll(x => x is VariableExpressionAst, false)
116-
select element as VariableExpressionAst;
117-
// VariablePath property is never null hence we don't need to check for it.
118-
var nullAst = varAstElements.FirstOrDefault(x => x != null
119-
&& x.VariablePath.IsUnqualified
120-
&& x.VariablePath.UserPath.Equals("null", StringComparison.OrdinalIgnoreCase));
121-
122-
if (nullAst == null)
152+
var astWithNull = pair.Item2.Find(HasNullInExpression, false);
153+
if (astWithNull != null)
123154
{
124-
return true;
155+
extent = astWithNull.Extent;
156+
return false;
125157
}
126158
else
127159
{
128-
extent = nullAst.Extent;
129-
return false;
160+
return true;
130161
}
131162
}
132-
else
133-
{
134-
extent = elementWithWildcard.Extent;
135-
return false;
136-
}
137163
}
138-
139164
}
140165
return true;
141166
}
142167

168+
169+
/// <summary>
170+
/// Gets the error string of the rule.
171+
/// </summary>
172+
/// <param name="field"></param>
173+
/// <returns></returns>
143174
public string GetError(string field)
144175
{
145176
return string.Format(CultureInfo.CurrentCulture, Strings.UseToExportFieldsInManifestError, field);

0 commit comments

Comments
 (0)