Skip to content

Commit 5793483

Browse files
committed
Update rules
1 parent 7c97a7b commit 5793483

File tree

6 files changed

+331
-4
lines changed

6 files changed

+331
-4
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@
1010

1111
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
1212
hs_err_pid*
13+
14+
.scannerwork
15+
.settings

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ You can support this [project and others](https://github.com/gretard) via [Paypa
2626
4. Install [PSScriptAnalyzer](https://github.com/PowerShell/PSScriptAnalyzer) into your build machine where you plan to run sonar scanner, quick steps:
2727
- In powershell terminal run (more [info](https://learn.microsoft.com/en-us/powershell/utility-modules/psscriptanalyzer/overview?view=ps-modules#installing-psscriptanalyzer)): ```Install-Module -Name PSScriptAnalyzer -Force```
2828
- Verify if module got installed successfully in poweshell terminal run (more [info](https://learn.microsoft.com/en-us/powershell/utility-modules/psscriptanalyzer/using-scriptanalyzer?source=recommendations&view=ps-modules)): ```Invoke-ScriptAnalyzer -ScriptDefinition '"b" = "b"; function eliminate-file () { }'```
29+
5. You can check [sample project](https://github.com/gretard/sonar-ps-plugin/tree/master/sampleProject) to test plugin and verify configuration
2930

3031
## Configuration ##
3132
Currently there is a possibility to override the following options either on server in the Administration tab or on the project configuration files:
@@ -39,6 +40,7 @@ Currently there is a possibility to override the following options either on ser
3940

4041
## Requirements ##
4142
Different plugin versions supports the following:
43+
- 0.5.3 - Sonarqube version 8.9.2+ and PSScriptAnalyzer version 1.20+ rules, Java 17+
4244
- 0.5.1 - Sonarqube version 8.9.2+ and PSScriptAnalyzer version 1.20+ rules, Java 11+
4345
- 0.5.0 - Sonarqube version 6.7.7+ and PSScriptAnalyzer version 1.18.1 rules, Java 8
4446
- 0.3.0 - Sonarqube version 6.3+ and PSScriptAnalyzer version 1.17.1 rules, Java 8

sampleProject/readme.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,8 @@
1-
Sample scripts from: https://adamtheautomator.com/powershell-script-examples/
1+
Sample scripts from: https://adamtheautomator.com/powershell-script-examples/
2+
3+
# Getting started
4+
5+
- Install sonar-ps plugin into SonarQube by copying jar from https://github.com/gretard/sonar-ps-plugin/releases into sonar ./downloads folder
6+
- Restart sonar server
7+
- Download scanner from https://docs.sonarsource.com/sonarqube/9.9/analyzing-source-code/scanners/sonarscanner/
8+
- Execute : ```sonar-scanner.bat -D"sonar.login=admin" -D"sonar.password=<<PASSWORD>>"```

sonar-ps-plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<groupId>org.sonar.plugins</groupId>
88
<artifactId>sonar-ps-plugin</artifactId>
99
<packaging>sonar-plugin</packaging>
10-
<version>0.5.1</version>
10+
<version>0.5.3</version>
1111

1212
<name>Powershell Plugin for SonarQube</name>
1313
<description>Powershell plugin for SonarQube</description>
Lines changed: 279 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,279 @@
1+
<?xml version="1.0"?>
2+
<profile>
3+
<name>Sonar way</name>
4+
<language>ps</language>
5+
<rules>
6+
<rule>
7+
<key>PSAlignAssignmentStatement</key>
8+
<repositoryKey>ps-psanalyzer</repositoryKey>
9+
</rule>
10+
<rule>
11+
<key>PSAvoidUsingCmdletAliases</key>
12+
<repositoryKey>ps-psanalyzer</repositoryKey>
13+
</rule>
14+
<rule>
15+
<key>PSAvoidAssignmentToAutomaticVariable</key>
16+
<repositoryKey>ps-psanalyzer</repositoryKey>
17+
</rule>
18+
<rule>
19+
<key>PSAvoidDefaultValueSwitchParameter</key>
20+
<repositoryKey>ps-psanalyzer</repositoryKey>
21+
</rule>
22+
<rule>
23+
<key>PSAvoidDefaultValueForMandatoryParameter</key>
24+
<repositoryKey>ps-psanalyzer</repositoryKey>
25+
</rule>
26+
<rule>
27+
<key>PSAvoidUsingEmptyCatchBlock</key>
28+
<repositoryKey>ps-psanalyzer</repositoryKey>
29+
</rule>
30+
<rule>
31+
<key>PSAvoidGlobalAliases</key>
32+
<repositoryKey>ps-psanalyzer</repositoryKey>
33+
</rule>
34+
<rule>
35+
<key>PSAvoidGlobalFunctions</key>
36+
<repositoryKey>ps-psanalyzer</repositoryKey>
37+
</rule>
38+
<rule>
39+
<key>PSAvoidGlobalVars</key>
40+
<repositoryKey>ps-psanalyzer</repositoryKey>
41+
</rule>
42+
<rule>
43+
<key>PSAvoidInvokingEmptyMembers</key>
44+
<repositoryKey>ps-psanalyzer</repositoryKey>
45+
</rule>
46+
<rule>
47+
<key>PSAvoidLongLines</key>
48+
<repositoryKey>ps-psanalyzer</repositoryKey>
49+
</rule>
50+
<rule>
51+
<key>PSAvoidMultipleTypeAttributes</key>
52+
<repositoryKey>ps-psanalyzer</repositoryKey>
53+
</rule>
54+
<rule>
55+
<key>PSAvoidNullOrEmptyHelpMessageAttribute</key>
56+
<repositoryKey>ps-psanalyzer</repositoryKey>
57+
</rule>
58+
<rule>
59+
<key>PSAvoidOverwritingBuiltInCmdlets</key>
60+
<repositoryKey>ps-psanalyzer</repositoryKey>
61+
</rule>
62+
<rule>
63+
<key>PSAvoidUsingPositionalParameters</key>
64+
<repositoryKey>ps-psanalyzer</repositoryKey>
65+
</rule>
66+
<rule>
67+
<key>PSReservedCmdletChar</key>
68+
<repositoryKey>ps-psanalyzer</repositoryKey>
69+
</rule>
70+
<rule>
71+
<key>PSReservedParams</key>
72+
<repositoryKey>ps-psanalyzer</repositoryKey>
73+
</rule>
74+
<rule>
75+
<key>PSAvoidSemicolonsAsLineTerminators</key>
76+
<repositoryKey>ps-psanalyzer</repositoryKey>
77+
</rule>
78+
<rule>
79+
<key>PSAvoidShouldContinueWithoutForce</key>
80+
<repositoryKey>ps-psanalyzer</repositoryKey>
81+
</rule>
82+
<rule>
83+
<key>PSAvoidTrailingWhitespace</key>
84+
<repositoryKey>ps-psanalyzer</repositoryKey>
85+
</rule>
86+
<rule>
87+
<key>PSAvoidUsingUsernameAndPasswordParams</key>
88+
<repositoryKey>ps-psanalyzer</repositoryKey>
89+
</rule>
90+
<rule>
91+
<key>PSAvoidUsingBrokenHashAlgorithms</key>
92+
<repositoryKey>ps-psanalyzer</repositoryKey>
93+
</rule>
94+
<rule>
95+
<key>PSAvoidUsingComputerNameHardcoded</key>
96+
<repositoryKey>ps-psanalyzer</repositoryKey>
97+
</rule>
98+
<rule>
99+
<key>PSAvoidUsingConvertToSecureStringWithPlainText</key>
100+
<repositoryKey>ps-psanalyzer</repositoryKey>
101+
</rule>
102+
<rule>
103+
<key>PSAvoidUsingDeprecatedManifestFields</key>
104+
<repositoryKey>ps-psanalyzer</repositoryKey>
105+
</rule>
106+
<rule>
107+
<key>PSAvoidUsingDoubleQuotesForConstantString</key>
108+
<repositoryKey>ps-psanalyzer</repositoryKey>
109+
</rule>
110+
<rule>
111+
<key>PSAvoidUsingInvokeExpression</key>
112+
<repositoryKey>ps-psanalyzer</repositoryKey>
113+
</rule>
114+
<rule>
115+
<key>PSAvoidUsingPlainTextForPassword</key>
116+
<repositoryKey>ps-psanalyzer</repositoryKey>
117+
</rule>
118+
<rule>
119+
<key>PSAvoidUsingWMICmdlet</key>
120+
<repositoryKey>ps-psanalyzer</repositoryKey>
121+
</rule>
122+
<rule>
123+
<key>PSAvoidUsingWriteHost</key>
124+
<repositoryKey>ps-psanalyzer</repositoryKey>
125+
</rule>
126+
<rule>
127+
<key>PSUseCompatibleCommands</key>
128+
<repositoryKey>ps-psanalyzer</repositoryKey>
129+
</rule>
130+
<rule>
131+
<key>PSUseCompatibleSyntax</key>
132+
<repositoryKey>ps-psanalyzer</repositoryKey>
133+
</rule>
134+
<rule>
135+
<key>PSUseCompatibleTypes</key>
136+
<repositoryKey>ps-psanalyzer</repositoryKey>
137+
</rule>
138+
<rule>
139+
<key>PSMisleadingBacktick</key>
140+
<repositoryKey>ps-psanalyzer</repositoryKey>
141+
</rule>
142+
<rule>
143+
<key>PSMissingModuleManifestField</key>
144+
<repositoryKey>ps-psanalyzer</repositoryKey>
145+
</rule>
146+
<rule>
147+
<key>PSPlaceCloseBrace</key>
148+
<repositoryKey>ps-psanalyzer</repositoryKey>
149+
</rule>
150+
<rule>
151+
<key>PSPlaceOpenBrace</key>
152+
<repositoryKey>ps-psanalyzer</repositoryKey>
153+
</rule>
154+
<rule>
155+
<key>PSPossibleIncorrectComparisonWithNull</key>
156+
<repositoryKey>ps-psanalyzer</repositoryKey>
157+
</rule>
158+
<rule>
159+
<key>PSPossibleIncorrectUsageOfAssignmentOperator</key>
160+
<repositoryKey>ps-psanalyzer</repositoryKey>
161+
</rule>
162+
<rule>
163+
<key>PSPossibleIncorrectUsageOfRedirectionOperator</key>
164+
<repositoryKey>ps-psanalyzer</repositoryKey>
165+
</rule>
166+
<rule>
167+
<key>PSProvideCommentHelp</key>
168+
<repositoryKey>ps-psanalyzer</repositoryKey>
169+
</rule>
170+
<rule>
171+
<key>PSReviewUnusedParameter</key>
172+
<repositoryKey>ps-psanalyzer</repositoryKey>
173+
</rule>
174+
<rule>
175+
<key>PSUseApprovedVerbs</key>
176+
<repositoryKey>ps-psanalyzer</repositoryKey>
177+
</rule>
178+
<rule>
179+
<key>PSUseBOMForUnicodeEncodedFile</key>
180+
<repositoryKey>ps-psanalyzer</repositoryKey>
181+
</rule>
182+
<rule>
183+
<key>PSUseCmdletCorrectly</key>
184+
<repositoryKey>ps-psanalyzer</repositoryKey>
185+
</rule>
186+
<rule>
187+
<key>PSUseCompatibleCmdlets</key>
188+
<repositoryKey>ps-psanalyzer</repositoryKey>
189+
</rule>
190+
<rule>
191+
<key>PSUseConsistentIndentation</key>
192+
<repositoryKey>ps-psanalyzer</repositoryKey>
193+
</rule>
194+
<rule>
195+
<key>PSUseConsistentWhitespace</key>
196+
<repositoryKey>ps-psanalyzer</repositoryKey>
197+
</rule>
198+
<rule>
199+
<key>PSUseCorrectCasing</key>
200+
<repositoryKey>ps-psanalyzer</repositoryKey>
201+
</rule>
202+
<rule>
203+
<key>PSUseDeclaredVarsMoreThanAssignments</key>
204+
<repositoryKey>ps-psanalyzer</repositoryKey>
205+
</rule>
206+
<rule>
207+
<key>PSUseLiteralInitializerForHashtable</key>
208+
<repositoryKey>ps-psanalyzer</repositoryKey>
209+
</rule>
210+
<rule>
211+
<key>PSUseOutputTypeCorrectly</key>
212+
<repositoryKey>ps-psanalyzer</repositoryKey>
213+
</rule>
214+
<rule>
215+
<key>PSUseProcessBlockForPipelineCommand</key>
216+
<repositoryKey>ps-psanalyzer</repositoryKey>
217+
</rule>
218+
<rule>
219+
<key>PSUsePSCredentialType</key>
220+
<repositoryKey>ps-psanalyzer</repositoryKey>
221+
</rule>
222+
<rule>
223+
<key>PSShouldProcess</key>
224+
<repositoryKey>ps-psanalyzer</repositoryKey>
225+
</rule>
226+
<rule>
227+
<key>PSUseShouldProcessForStateChangingFunctions</key>
228+
<repositoryKey>ps-psanalyzer</repositoryKey>
229+
</rule>
230+
<rule>
231+
<key>PSUseSingularNouns</key>
232+
<repositoryKey>ps-psanalyzer</repositoryKey>
233+
</rule>
234+
<rule>
235+
<key>PSUseSupportsShouldProcess</key>
236+
<repositoryKey>ps-psanalyzer</repositoryKey>
237+
</rule>
238+
<rule>
239+
<key>PSUseToExportFieldsInManifest</key>
240+
<repositoryKey>ps-psanalyzer</repositoryKey>
241+
</rule>
242+
<rule>
243+
<key>PSUseUsingScopeModifierInNewRunspaces</key>
244+
<repositoryKey>ps-psanalyzer</repositoryKey>
245+
</rule>
246+
<rule>
247+
<key>PSUseUTF8EncodingForHelpFile</key>
248+
<repositoryKey>ps-psanalyzer</repositoryKey>
249+
</rule>
250+
<rule>
251+
<key>PSDSCDscExamplesPresent</key>
252+
<repositoryKey>ps-psanalyzer</repositoryKey>
253+
</rule>
254+
<rule>
255+
<key>PSDSCDscTestsPresent</key>
256+
<repositoryKey>ps-psanalyzer</repositoryKey>
257+
</rule>
258+
<rule>
259+
<key>PSDSCReturnCorrectTypesForDSCFunctions</key>
260+
<repositoryKey>ps-psanalyzer</repositoryKey>
261+
</rule>
262+
<rule>
263+
<key>PSDSCUseIdenticalMandatoryParametersForDSC</key>
264+
<repositoryKey>ps-psanalyzer</repositoryKey>
265+
</rule>
266+
<rule>
267+
<key>PSDSCUseIdenticalParametersForDSC</key>
268+
<repositoryKey>ps-psanalyzer</repositoryKey>
269+
</rule>
270+
<rule>
271+
<key>PSDSCStandardDSCFunctionsInResource</key>
272+
<repositoryKey>ps-psanalyzer</repositoryKey>
273+
</rule>
274+
<rule>
275+
<key>PSDSCUseVerboseMessageInDSCResource</key>
276+
<repositoryKey>ps-psanalyzer</repositoryKey>
277+
</rule>
278+
</rules>
279+
</profile>

sonar-ps-plugin/src/main/resources/powershell-rules.xml

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,18 @@
132132
<debtRemediationFunctionCoefficient>5min</debtRemediationFunctionCoefficient>
133133
<severity>MAJOR</severity>
134134
</rule>
135+
<rule>
136+
<key>PSAvoidMultipleTypeAttributes</key>
137+
<internalKey>PSAvoidMultipleTypeAttributes</internalKey>
138+
<name>Avoid multiple type specifiers on parameters</name>
139+
<description>Prameter should not have more than one type specifier.</description>
140+
<cardinality>SINGLE</cardinality>
141+
<remediationFunction>LINEAR</remediationFunction>
142+
<descriptionFormat>MARKDOWN</descriptionFormat>
143+
<remediationFunctionBaseEffort />
144+
<debtRemediationFunctionCoefficient>5min</debtRemediationFunctionCoefficient>
145+
<severity>MAJOR</severity>
146+
</rule>
135147
<rule>
136148
<key>PSAvoidNullOrEmptyHelpMessageAttribute</key>
137149
<internalKey>PSAvoidNullOrEmptyHelpMessageAttribute</internalKey>
@@ -192,6 +204,18 @@
192204
<debtRemediationFunctionCoefficient>5min</debtRemediationFunctionCoefficient>
193205
<severity>MAJOR</severity>
194206
</rule>
207+
<rule>
208+
<key>PSAvoidSemicolonsAsLineTerminators</key>
209+
<internalKey>PSAvoidSemicolonsAsLineTerminators</internalKey>
210+
<name>Avoid semicolons as line terminators</name>
211+
<description>Line should not end with a semicolon</description>
212+
<cardinality>SINGLE</cardinality>
213+
<remediationFunction>LINEAR</remediationFunction>
214+
<descriptionFormat>MARKDOWN</descriptionFormat>
215+
<remediationFunctionBaseEffort />
216+
<debtRemediationFunctionCoefficient>5min</debtRemediationFunctionCoefficient>
217+
<severity>MAJOR</severity>
218+
</rule>
195219
<rule>
196220
<key>PSAvoidShouldContinueWithoutForce</key>
197221
<internalKey>PSAvoidShouldContinueWithoutForce</internalKey>
@@ -228,6 +252,18 @@
228252
<debtRemediationFunctionCoefficient>15min</debtRemediationFunctionCoefficient>
229253
<severity>BLOCKER</severity>
230254
</rule>
255+
<rule>
256+
<key>PSAvoidUsingBrokenHashAlgorithms</key>
257+
<internalKey>PSAvoidUsingBrokenHashAlgorithms</internalKey>
258+
<name>Avoid Using Broken Hash Algorithms</name>
259+
<description>Avoid using the broken algorithms MD5 or SHA-1.</description>
260+
<cardinality>SINGLE</cardinality>
261+
<remediationFunction>LINEAR</remediationFunction>
262+
<descriptionFormat>MARKDOWN</descriptionFormat>
263+
<remediationFunctionBaseEffort />
264+
<debtRemediationFunctionCoefficient>5min</debtRemediationFunctionCoefficient>
265+
<severity>MAJOR</severity>
266+
</rule>
231267
<rule>
232268
<key>PSAvoidUsingComputerNameHardcoded</key>
233269
<internalKey>PSAvoidUsingComputerNameHardcoded</internalKey>
@@ -423,7 +459,7 @@
423459
<rule>
424460
<key>PSPossibleIncorrectUsageOfAssignmentOperator</key>
425461
<internalKey>PSPossibleIncorrectUsageOfAssignmentOperator</internalKey>
426-
<name>'=' is not an comparison operator. Did you mean the equality operator '-eq'?</name>
462+
<name>'=' is not an assignment operator. Did you mean the equality operator '-eq'?</name>
427463
<description>'=' or '==' are not comparison operators in the PowerShell language and rarely needed inside conditional statements.</description>
428464
<cardinality>SINGLE</cardinality>
429465
<remediationFunction>LINEAR</remediationFunction>
@@ -780,4 +816,4 @@
780816
<debtRemediationFunctionCoefficient>2min</debtRemediationFunctionCoefficient>
781817
<severity>INFO</severity>
782818
</rule>
783-
</psrules>
819+
</psrules>

0 commit comments

Comments
 (0)