1111//
1212
1313using System ;
14+ using System . Collections ;
1415using System . Collections . Generic ;
1516using System . Linq ;
17+ using System . Linq . Expressions ;
1618using System . Management . Automation . Language ;
1719using Microsoft . Windows . PowerShell . ScriptAnalyzer . Generic ;
1820using System . ComponentModel . Composition ;
@@ -44,8 +46,19 @@ public IEnumerable<DiagnosticRecord> AnalyzeScript(Ast ast, string fileName)
4446 {
4547 foreach ( StringConstantExpressionAst expressionAst in expressionAsts )
4648 {
47- //Check if XPath is used. If XPath is used, then we don't throw warnings.
49+
4850 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.
4962 if ( parentAst is InvokeMemberExpressionAst )
5063 {
5164 InvokeMemberExpressionAst invocation = parentAst as InvokeMemberExpressionAst ;
@@ -55,7 +68,9 @@ public IEnumerable<DiagnosticRecord> AnalyzeScript(Ast ast, string fileName)
5568 String . Equals ( invocation . Member . ToString ( ) , "SelectNodes" , StringComparison . OrdinalIgnoreCase ) ||
5669 String . Equals ( invocation . Member . ToString ( ) , "Select" , StringComparison . OrdinalIgnoreCase ) ||
5770 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 ) )
5974 {
6075 continue ;
6176 }
0 commit comments