-
Notifications
You must be signed in to change notification settings - Fork 51
/
ScriptsAndStyleMandatoryDisplayContextCheck.java
78 lines (66 loc) · 2.56 KB
/
ScriptsAndStyleMandatoryDisplayContextCheck.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*-
* #%L
* AEM Rules for SonarQube
* %%
* Copyright (C) 2015-2019 Wunderman Thompson Technology
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package com.cognifide.aemrules.htl.checks;
import com.cognifide.aemrules.metadata.Metadata;
import com.cognifide.aemrules.tag.Tags;
import com.cognifide.aemrules.version.AemVersion;
import org.apache.sling.scripting.sightly.compiler.expression.Expression;
import org.apache.sling.scripting.sightly.impl.compiler.Syntax;
import org.sonar.check.Priority;
import org.sonar.check.Rule;
import org.sonar.plugins.html.node.Node;
import org.sonar.plugins.html.node.TagNode;
@Rule(
key = ScriptsAndStyleMandatoryDisplayContextCheck.RULE_KEY,
name = ScriptsAndStyleMandatoryDisplayContextCheck.RULE_MESSAGE,
priority = Priority.MAJOR,
tags = Tags.AEM
)
@AemVersion(
from = "6.0"
)
@Metadata(
technicalDebt = "5min"
)
public class ScriptsAndStyleMandatoryDisplayContextCheck extends AbstractHtlCheck {
public static final String RULE_KEY = "HTL-7";
public static final String RULE_MESSAGE = "For style and script tags display context definition is mandatory";
private static final String VIOLATION_MESSAGE = "Please define display context for literal expression";
private static final String SCRIPT_TAG_NAME = "script";
private static final String STYLE_TAG_NAME = "style";
private boolean isEmbeddedInstructionNode = false;
@Override
public void startElement(TagNode node) {
String nodeName = node.getNodeName();
if (nodeName.equalsIgnoreCase(SCRIPT_TAG_NAME) || nodeName.equalsIgnoreCase(STYLE_TAG_NAME)) {
isEmbeddedInstructionNode = true;
}
}
@Override
public void htlExpression(Expression expression, Node node) {
if (isEmbeddedInstructionNode && !expression.containsOption(Syntax.CONTEXT_OPTION)) {
createViolation(node.getStartLinePosition(), VIOLATION_MESSAGE);
}
}
@Override
public void endElement(TagNode node) {
isEmbeddedInstructionNode = false;
}
}