Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9edb1da

Browse filesBrowse files
committed
Use the effective category in the exclusion process
In this commit we expand the meta data `Query` class to provide an effective category that is determined by combining a query's category and a possible active Guideline Recategorization Plan. The exclusion process now validates for a query with an associated deviation record whether the effective category allows a deviation. If this is not allowed, then the deviation record is not applied. Any deviation record applied to a query with an effective category not permitting deviation is considered invalid and will be listed in the analysis report.
1 parent 0bdf011 commit 9edb1da
Copy full SHA for 9edb1da

File tree

Expand file treeCollapse file tree

8 files changed

+69
-35
lines changed
Filter options
Expand file treeCollapse file tree

8 files changed

+69
-35
lines changed

‎cpp/common/src/codingstandards/cpp/Exclusions.qll

Copy file name to clipboardExpand all lines: cpp/common/src/codingstandards/cpp/Exclusions.qll
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ predicate isExcluded(Element e, Query query) {
3232
or
3333
not exists(e.getFile())
3434
or
35-
// There exists a `DeviationRecord` that applies to this element and query
35+
// There exists a `DeviationRecord` that applies to this element and query, and the query's effective category permits deviation.
36+
query.getEffectiveCategory().permitsDeviation() and
3637
exists(DeviationRecord dr | applyDeviationsAtQueryLevel() |
3738
// The element is in a file which has a deviation for this query
3839
exists(string path |

‎cpp/common/src/codingstandards/cpp/deviations/Deviations.qll

Copy file name to clipboardExpand all lines: cpp/common/src/codingstandards/cpp/deviations/Deviations.qll
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,13 @@ class DeviationRecord extends XMLElement {
332332
hasPermitId() and
333333
not hasADeviationPermit() and
334334
result = "There is no deviation permit with id `" + getPermitId() + "`."
335+
or
336+
exists(Query q | q.getQueryId() = getQueryId() |
337+
not q.getEffectiveCategory().permitsDeviation() and
338+
result =
339+
"The deviation is applied to a query with the rule category '" +
340+
q.getEffectiveCategory().toString() + "' that does not permit a deviation."
341+
)
335342
}
336343

337344
/** Holds if the deviation record is valid */

‎cpp/common/src/codingstandards/cpp/exclusions/RuleMetadata.qll

Copy file name to clipboardExpand all lines: cpp/common/src/codingstandards/cpp/exclusions/RuleMetadata.qll
+45Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,47 @@
11
import cpp
22
private import cpp.RuleMetadata as CPPRuleMetadata
33
private import c.RuleMetadata as CRuleMetadata
4+
private import codingstandards.cpp.guideline_recategorizations.GuidelineRecategorizations
45

56
newtype TQuery =
67
TQueryCPP(CPPRuleMetadata::TCPPQuery t) or
78
TQueryC(CRuleMetadata::TCQuery t)
89

10+
private predicate isMisraRuleCategory(string category) {
11+
category = ["disapplied", "advisory", "required", "mandatory"]
12+
}
13+
14+
newtype TEffectiveCategory =
15+
TInvalid(string reason) {
16+
exists(GuidelineRecategorization gr | reason = gr.getAnInvalidReason())
17+
} or
18+
TDisapplied() or
19+
TAdvisory() or
20+
TRequired() or
21+
TMandatory() or
22+
TNonMisraRuleCategory(string category) {
23+
exists(Query q | q.getCategory() = category | not isMisraRuleCategory(category))
24+
}
25+
26+
class EffectiveCategory extends TEffectiveCategory {
27+
string toString() {
28+
this instanceof TInvalid and result = "invalid"
29+
or
30+
this instanceof TDisapplied and result = "disapplied"
31+
or
32+
this instanceof TAdvisory and result = "advisory"
33+
or
34+
this instanceof TRequired and result = "required"
35+
or
36+
this instanceof TMandatory and result = "mandatory"
37+
or
38+
this = TNonMisraRuleCategory(result)
39+
}
40+
41+
/** Holds if the effective category permits a deviation */
42+
predicate permitsDeviation() { not this instanceof TMandatory and not this instanceof TInvalid }
43+
}
44+
945
class Query extends TQuery {
1046
string getQueryId() {
1147
CPPRuleMetadata::isQueryMetadata(this, result, _, _) or
@@ -22,5 +58,14 @@ class Query extends TQuery {
2258
CRuleMetadata::isQueryMetadata(this, _, _, result)
2359
}
2460

61+
EffectiveCategory getEffectiveCategory() {
62+
if exists(GuidelineRecategorization gr | gr.getQuery() = this)
63+
then
64+
exists(GuidelineRecategorization gr | gr.getQuery() = this |
65+
result = gr.getEffectiveCategory()
66+
)
67+
else result.toString() = this.getCategory()
68+
}
69+
2570
string toString() { result = getQueryId() }
2671
}

‎cpp/common/src/codingstandards/cpp/guideline_recategorizations/GuidelineRecategorizations.qll

Copy file name to clipboardExpand all lines: cpp/common/src/codingstandards/cpp/guideline_recategorizations/GuidelineRecategorizations.qll
-26Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,32 +12,6 @@ class GuidelineRecategorizations extends CodingStandardsConfigSection {
1212
GuidelineRecategorizations() { hasName("guideline-recategorizations") }
1313
}
1414

15-
newtype TEffectiveCategory =
16-
TInvalid(string reason) {
17-
exists(GuidelineRecategorization gr | reason = gr.getAnInvalidReason())
18-
} or
19-
TDisapplied() or
20-
TAdvisory() or
21-
TRequired() or
22-
TMandatory()
23-
24-
class EffectiveCategory extends TEffectiveCategory {
25-
string toString() {
26-
this instanceof TInvalid and result = "invalid"
27-
or
28-
this instanceof TDisapplied and result = "disapplied"
29-
or
30-
this instanceof TAdvisory and result = "advisory"
31-
or
32-
this instanceof TRequired and result = "required"
33-
or
34-
this instanceof TMandatory and result = "mandatory"
35-
}
36-
37-
/** Holds if the effective category permits a deviation */
38-
predicate permitsDeviation() { not this instanceof TMandatory and not this instanceof TInvalid }
39-
}
40-
4115
class GuidelineRecategorization extends XMLElement {
4216
GuidelineRecategorization() {
4317
getParent() instanceof GuidelineRecategorizations and
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
| coding-standards.xml:96:7:99:33 | deviation-permits-entry | deviations/invalid_deviations/coding-standards.xml: Deviation permit does not specify a permit identifier. |
2-
| coding-standards.xml:100:7:103:33 | deviation-permits-entry | deviations/invalid_deviations/coding-standards.xml: Deviation permit specifies unknown property `invalid-property`. |
1+
| coding-standards.xml:100:7:103:33 | deviation-permits-entry | deviations/invalid_deviations/coding-standards.xml: Deviation permit does not specify a permit identifier. |
2+
| coding-standards.xml:104:7:107:33 | deviation-permits-entry | deviations/invalid_deviations/coding-standards.xml: Deviation permit specifies unknown property `invalid-property`. |

‎cpp/common/test/deviations/invalid_deviations/InvalidDeviationRecords.expected

Copy file name to clipboardExpand all lines: cpp/common/test/deviations/invalid_deviations/InvalidDeviationRecords.expected
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
| coding-standards.xml:5:7:5:26 | deviations-entry | deviations/invalid_deviations/coding-standards.xml: No rule-id and query-id specified for this deviation record. |
1+
| coding-standards.xml:5:7:5:27 | deviations-entry | deviations/invalid_deviations/coding-standards.xml: No rule-id and query-id specified for this deviation record. |
22
| coding-standards.xml:6:7:8:26 | deviations-entry | deviations/invalid_deviations/coding-standards.xml: The rule-id `bad rule id` for this deviation matches none of the available queries. |
33
| coding-standards.xml:9:7:11:26 | deviations-entry | deviations/invalid_deviations/coding-standards.xml: A query-id of `bad rule id` is specified for this deviation, but not rule-id is specified. |
44
| coding-standards.xml:15:7:17:26 | deviations-entry | deviations/invalid_deviations/coding-standards.xml: A query-id of `cpp/autosar/useless-assignment` is specified for this deviation, but not rule-id is specified. |
@@ -11,3 +11,4 @@
1111
| coding-standards.xml:51:7:61:26 | deviations-entry | deviations/invalid_deviations/coding-standards.xml: A deviation `approved-by` is specified without providing both a `name` and `date`. |
1212
| coding-standards.xml:74:7:78:26 | deviations-entry | deviations/invalid_deviations/coding-standards.xml: There is no deviation permit with id `non-existing-permit`. |
1313
| coding-standards.xml:79:7:81:26 | deviations-entry | deviations/invalid_deviations/coding-standards.xml: No rule-id and query-id specified for this deviation record. |
14+
| coding-standards.xml:85:7:88:26 | deviations-entry | deviations/invalid_deviations/coding-standards.xml: The deviation is applied to a query with the rule category 'mandatory' that does not permit a deviation. |

‎cpp/common/test/deviations/invalid_deviations/coding-standards.xml

Copy file name to clipboardExpand all lines: cpp/common/test/deviations/invalid_deviations/coding-standards.xml
+9-5Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
<?xml version="1.0" ?>
1+
<?xml version="1.0"?>
22
<codingstandards>
33
<!--GENERATED: DO NOT MODIFY. Changes should be made to coding-standards.yml instead.-->
44
<deviations>
5-
<deviations-entry/>
5+
<deviations-entry />
66
<deviations-entry>
77
<rule-id>bad rule id</rule-id>
88
</deviations-entry>
@@ -22,7 +22,7 @@
2222
<deviations-entry>
2323
<rule-id>A0-1-1</rule-id>
2424
<query-id>cpp/autosar/useless-assignment</query-id>
25-
<raised-by/>
25+
<raised-by />
2626
</deviations-entry>
2727
<deviations-entry>
2828
<rule-id>A0-1-1</rule-id>
@@ -46,7 +46,7 @@
4646
<name>foo3</name>
4747
<date>1970-01-01Z</date>
4848
</raised-by>
49-
<approved-by/>
49+
<approved-by />
5050
</deviations-entry>
5151
<deviations-entry>
5252
<rule-id>A0-1-1</rule-id>
@@ -82,6 +82,10 @@
8282
<deviations-entry>
8383
<permit-id>DP2</permit-id>
8484
</deviations-entry>
85+
<deviations-entry>
86+
<rule-id>RULE-13-6</rule-id>
87+
<query-id>c/misra/sizeof-operand-with-side-effect</query-id>
88+
</deviations-entry>
8589
</deviations>
8690
<deviation-permits>
8791
<deviation-permits-entry>
@@ -102,4 +106,4 @@
102106
<invalid-property>invalid-property</invalid-property>
103107
</deviation-permits-entry>
104108
</deviation-permits>
105-
</codingstandards>
109+
</codingstandards>

‎cpp/common/test/deviations/invalid_deviations/coding-standards.yml

Copy file name to clipboardExpand all lines: cpp/common/test/deviations/invalid_deviations/coding-standards.yml
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ deviations:
4444
permit-id: non-existing-permit
4545
- permit-id: DP1
4646
- permit-id: DP2
47+
- rule-id: RULE-13-6
48+
query-id: c/misra/sizeof-operand-with-side-effect
4749
deviation-permits:
4850
- permit-id: DP1
4951
justification: foo bar baz

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.