Skip to content

Commit f719a3b

Browse files
author
Kapil Borle
committed
Merge pull request #454 from PowerShell/FixAvoidNullOrEmptyHelpMessageAttribute
Fixes to AvoidNullOrEmptyHelpMessageAttribute.
2 parents e74ea46 + 84d6896 commit f719a3b

File tree

1 file changed

+40
-15
lines changed

1 file changed

+40
-15
lines changed

Rules/AvoidNullOrEmptyHelpMessageAttribute.cs

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,51 +38,52 @@ public IEnumerable<DiagnosticRecord> AnalyzeScript(Ast ast, string fileName)
3838

3939
foreach (FunctionDefinitionAst funcAst in functionAsts)
4040
{
41-
if (funcAst.Body == null || funcAst.Body.ParamBlock == null
42-
|| funcAst.Body.ParamBlock.Attributes == null || funcAst.Body.ParamBlock.Parameters == null)
41+
if (funcAst.Body == null || funcAst.Body.ParamBlock == null || funcAst.Body.ParamBlock.Parameters == null)
4342
{
4443
continue;
4544
}
4645

47-
foreach (var paramAst in funcAst.Body.ParamBlock.Parameters)
48-
{
49-
foreach (var paramAstAttribute in paramAst.Attributes)
46+
foreach (ParameterAst paramAst in funcAst.Body.ParamBlock.Parameters)
47+
{
48+
if (paramAst == null)
5049
{
51-
if (!(paramAstAttribute is AttributeAst))
50+
continue;
51+
}
52+
53+
foreach (AttributeBaseAst attributeAst in paramAst.Attributes)
54+
{
55+
var paramAttributeAst = attributeAst as AttributeAst;
56+
if (paramAttributeAst == null)
5257
{
5358
continue;
5459
}
5560

56-
var namedArguments = (paramAstAttribute as AttributeAst).NamedArguments;
57-
61+
var namedArguments = paramAttributeAst.NamedArguments;
5862
if (namedArguments == null)
5963
{
6064
continue;
6165
}
62-
66+
6367
foreach (NamedAttributeArgumentAst namedArgument in namedArguments)
6468
{
65-
if (!(namedArgument.ArgumentName.Equals("HelpMessage", StringComparison.OrdinalIgnoreCase)))
69+
if (namedArgument == null || !(namedArgument.ArgumentName.Equals("HelpMessage", StringComparison.OrdinalIgnoreCase)))
6670
{
6771
continue;
6872
}
6973

7074
string errCondition;
71-
if (namedArgument.ExpressionOmitted
72-
|| namedArgument.Argument.Extent.Text.Equals("\"\"")
73-
|| namedArgument.Argument.Extent.Text.Equals("\'\'"))
75+
if (namedArgument.ExpressionOmitted || HasEmptyStringInExpression(namedArgument.Argument))
7476
{
7577
errCondition = "empty";
7678
}
77-
else if (namedArgument.Argument.Extent.Text.Equals("$null", StringComparison.OrdinalIgnoreCase))
79+
else if (HasNullInExpression(namedArgument.Argument))
7880
{
7981
errCondition = "null";
8082
}
8183
else
8284
{
8385
errCondition = null;
8486
}
85-
8687
if (!String.IsNullOrEmpty(errCondition))
8788
{
8889
string message = string.Format(CultureInfo.CurrentCulture,
@@ -102,6 +103,30 @@ public IEnumerable<DiagnosticRecord> AnalyzeScript(Ast ast, string fileName)
102103
}
103104
}
104105

106+
/// <summary>
107+
/// Checks if the given ast is an empty string.
108+
/// </summary>
109+
/// <param name="ast"></param>
110+
/// <returns></returns>
111+
private bool HasEmptyStringInExpression(ExpressionAst ast)
112+
{
113+
var constStrAst = ast as StringConstantExpressionAst;
114+
return constStrAst != null && constStrAst.Value.Equals(String.Empty);
115+
}
116+
117+
/// <summary>
118+
/// Checks if the ast contains null expression.
119+
/// </summary>
120+
/// <param name="ast"></param>
121+
/// <returns></returns>
122+
private bool HasNullInExpression(Ast ast)
123+
{
124+
var varExprAst = ast as VariableExpressionAst;
125+
return varExprAst != null
126+
&& varExprAst.VariablePath.IsUnqualified
127+
&& varExprAst.VariablePath.UserPath.Equals("null", StringComparison.OrdinalIgnoreCase);
128+
}
129+
105130
/// <summary>
106131
/// GetName: Retrieves the name of this rule.
107132
/// </summary>

0 commit comments

Comments
 (0)