11
11
//
12
12
13
13
using System ;
14
+ using System . Collections ;
14
15
using System . Collections . Generic ;
15
16
using System . Linq ;
17
+ using System . Linq . Expressions ;
16
18
using System . Management . Automation . Language ;
17
19
using Microsoft . Windows . PowerShell . ScriptAnalyzer . Generic ;
18
20
using System . ComponentModel . Composition ;
@@ -44,8 +46,19 @@ public IEnumerable<DiagnosticRecord> AnalyzeScript(Ast ast, string fileName)
44
46
{
45
47
foreach ( StringConstantExpressionAst expressionAst in expressionAsts )
46
48
{
47
- //Check if XPath is used. If XPath is used, then we don't throw warnings.
49
+
48
50
Ast parentAst = expressionAst . Parent ;
51
+ //Check if -replace is used, if it is string replace, we don't throw warnings.
52
+ Ast grandParentAst = parentAst . Parent ;
53
+ if ( grandParentAst is BinaryExpressionAst )
54
+ {
55
+ if ( ( grandParentAst as BinaryExpressionAst ) . Operator . Equals ( TokenKind . Ireplace ) )
56
+ {
57
+ continue ;
58
+ }
59
+ }
60
+
61
+ //Check if XPath is used. If XPath is used, then we don't throw warnings.
49
62
if ( parentAst is InvokeMemberExpressionAst )
50
63
{
51
64
InvokeMemberExpressionAst invocation = parentAst as InvokeMemberExpressionAst ;
@@ -55,7 +68,9 @@ public IEnumerable<DiagnosticRecord> AnalyzeScript(Ast ast, string fileName)
55
68
String . Equals ( invocation . Member . ToString ( ) , "SelectNodes" , StringComparison . OrdinalIgnoreCase ) ||
56
69
String . Equals ( invocation . Member . ToString ( ) , "Select" , StringComparison . OrdinalIgnoreCase ) ||
57
70
String . Equals ( invocation . Member . ToString ( ) , "Evaluate" , StringComparison . OrdinalIgnoreCase ) ||
58
- String . Equals ( invocation . Member . ToString ( ) , "Matches" , StringComparison . OrdinalIgnoreCase ) )
71
+ String . Equals ( invocation . Member . ToString ( ) , "Matches" , StringComparison . OrdinalIgnoreCase ) ||
72
+ String . Equals ( invocation . Expression . ToString ( ) , "[System.String]" , StringComparison . OrdinalIgnoreCase ) ||
73
+ String . Equals ( invocation . Expression . ToString ( ) , "[String]" , StringComparison . OrdinalIgnoreCase ) )
59
74
{
60
75
continue ;
61
76
}
0 commit comments