Use a more readable form to display parameters
This commit is contained in:
parent
a5a9904a80
commit
7d868d3f35
39
README.adoc
39
README.adoc
@ -21,6 +21,14 @@ include::supported_languages.adoc[]
|
||||
**** `rules/Sxxxx/[LANGUAGE]/rule.adoc`: asciidoc file used to generate the `Sxxxx` rule description for programming language `[LANGUAGE]`. It can include parts from `*.adoc` files located in the parent directory.
|
||||
**** `rules/Sxxxx/[LANGUAGE]/metadata.json`: metadatas for the specific language. Each key at the top will completely override the key of the `metadata.json` file of the parent directory.
|
||||
|
||||
== Rule description file
|
||||
|
||||
Refer to the <<docs/description.adoc#,documentation about rules description>> for the content of the rule.adoc file.
|
||||
|
||||
== Metadata file
|
||||
|
||||
Refer to the <<docs/metadata.adoc#,documentation about the metadata file>> for the content of the metadata.json file.
|
||||
|
||||
== Non-content modifications
|
||||
|
||||
Refer to the <<docs/testing.adoc#,documentation about testing>> if you plan to change something else than rules.
|
||||
@ -225,37 +233,6 @@ It is infeasible to synchronize the implementation of the rule for all the langu
|
||||
.. Bob merges the rule implementation in Cobol analyzer.
|
||||
.. If Bob had opened an RSPEC PR with changes, he merges it once the rule is implemented in the analyzer.
|
||||
|
||||
== `quickfix` field
|
||||
|
||||
Every active rule that is not a security hotspot must specify the availability of a quick fix for its issues.
|
||||
`metadata.json` must feature a `quickfix` field with one of the following values:
|
||||
|
||||
* `unknown`: the feasibility of producing a quick fix is not evaluated.
|
||||
* `infeasible`: it is not feasible to propose a quick fix for any of the issues, for whatever reason.
|
||||
* `targeted`: it is possible to implement quick fixes for this rule, but none are implemented right now.
|
||||
* `partial`: some of the issues produced by the rule propose a quick fix, but not all.
|
||||
* `covered`: all the issues produced by the rule propose a quick fix.
|
||||
|
||||
[NOTE]
|
||||
====
|
||||
A `covered` rule is still not guaranteed to provide a quick fix for a particular issue (for instance, if a fix location would be inside a macro expansion or in a different file from the issue location). The rule is said to have a `partial` quick fix only if there exists a family of issues that cannot have a quick fix.
|
||||
|
||||
For instance, on one hand, if a rule detects two functions that are dangerous to use, `A` and `B`, and `A` has an obvious replacement (and therefore a quick fix) while `B` does not, the field should be set to `partial`.
|
||||
|
||||
On the other hand, if a quick fix could be easily proposed for both `A` and `B`, but the fix location might be inside a macro expansion, or in a different file from the issue location (and hence not feasible given the current SonarLint capabilities), this should not prevent the rule from being tagged as `covered`.
|
||||
====
|
||||
== Comment a rule
|
||||
|
||||
Comments and links that were created on Jira have been gathered in a `comments-and-links.adoc` file for each concerned rule. +
|
||||
You can add a comment anywhere in a rule by adding the following lines in the `*.adoc` file:
|
||||
[source]
|
||||
----
|
||||
\ifdef::env-github,rspecator-view[]
|
||||
John Doe (9 Jun 2021, 15:49): my comment on the rule
|
||||
\endif::env-github,rspecator-view[]
|
||||
----
|
||||
This way, your comment will only be visible in GitHub preview and on the Search Page (and will not be visible for the user).
|
||||
|
||||
== Untriaged Pull Requests
|
||||
|
||||
Untriaged PRs are the ones without any GitHub label assigned to them.
|
||||
|
@ -7,32 +7,30 @@ pipenv install
|
||||
cd ..
|
||||
|
||||
# Compute the set of affected rules
|
||||
git fetch origin $CIRRUS_DEFAULT_BRANCH
|
||||
git fetch origin "$CIRRUS_DEFAULT_BRANCH"
|
||||
branch_base_sha=$(git merge-base FETCH_HEAD HEAD)
|
||||
echo "Comparing against the merge-base: $branch_base_sha"
|
||||
changeset=$(git diff --name-only $branch_base_sha..HEAD)
|
||||
changeset=$(git diff --name-only "$branch_base_sha"..HEAD)
|
||||
affected_rules=$(printf '%s\n' "$changeset" | grep '/S[0-9]\+/' | sed 's:\(.*/S[0-9]\+\)/.*:\1:' | sort | uniq)
|
||||
affected_tooling=$(printf '%s\n' "$changeset" | grep -v '/S[0-9]\+/')
|
||||
if [ ! -z "$affected_tooling" ]; then
|
||||
if [ -n "$affected_tooling" ]; then
|
||||
echo "Some rpec tools are changed, validating all rules"
|
||||
affected_rules=rules/*
|
||||
fi
|
||||
|
||||
./ci/generate_html.sh
|
||||
|
||||
exit_code=0
|
||||
|
||||
./ci/generate_html.sh
|
||||
|
||||
cd rspec-tools
|
||||
# validate sections in asciidoc
|
||||
if pipenv run rspec-tools check-sections --d ../out; then
|
||||
echo "Sections are fine"
|
||||
if pipenv run rspec-tools check-description --d ../out; then
|
||||
echo "rule.adoc is fine"
|
||||
else
|
||||
echo "ERROR: incorrect section names or invalid level-0 headers"
|
||||
echo "ERROR: rule.adoc is not valid"
|
||||
exit_code=1
|
||||
fi
|
||||
cd ..
|
||||
|
||||
|
||||
for dir in $affected_rules
|
||||
do
|
||||
if [ ! -d "$dir" ]; then
|
||||
@ -40,9 +38,9 @@ do
|
||||
continue
|
||||
fi
|
||||
dir=${dir%*/}
|
||||
echo ${dir##*/}
|
||||
echo "${dir##*/}"
|
||||
|
||||
subdircount=$(find $dir -maxdepth 1 -type d | wc -l)
|
||||
subdircount=$(find "$dir" -maxdepth 1 -type d | wc -l)
|
||||
|
||||
# check if there are language specializations
|
||||
if [[ "$subdircount" -eq 1 ]]
|
||||
@ -60,19 +58,19 @@ do
|
||||
for language in $dir/*/
|
||||
do
|
||||
language=${language%*/}
|
||||
echo ${language##*/}
|
||||
if [[ ! "${supportedLanguages[@]}" =~ "${language##*/}" ]]; then
|
||||
echo "${language##*/}"
|
||||
if [[ ! "${supportedLanguages[*]}" == *"${language##*/}"* ]]; then
|
||||
echo "ERROR: ${language##*/} is not a supported language"
|
||||
exit_code=1
|
||||
fi
|
||||
RULE="$language/rule.adoc"
|
||||
if test -f $RULE; then
|
||||
if test -f "$RULE"; then
|
||||
echo "$RULE exists."
|
||||
TMP_ADOC="$language/tmp.adoc"
|
||||
echo "== Description" > $TMP_ADOC
|
||||
cat $RULE >> $TMP_ADOC
|
||||
if asciidoctor --failure-level=WARNING -o /dev/null $TMP_ADOC; then
|
||||
if asciidoctor -a rspecator-view --failure-level=WARNING -o /dev/null $TMP_ADOC; then
|
||||
echo "== Description" > "$TMP_ADOC"
|
||||
cat "$RULE" >> "$TMP_ADOC"
|
||||
if asciidoctor --failure-level=WARNING -o /dev/null "$TMP_ADOC"; then
|
||||
if asciidoctor -a rspecator-view --failure-level=WARNING -o /dev/null "$TMP_ADOC"; then
|
||||
echo "$RULE syntax is fine"
|
||||
else
|
||||
echo "ERROR: $RULE has incorrect asciidoc in rspecator-view mode"
|
||||
@ -82,17 +80,26 @@ do
|
||||
echo "ERROR: $RULE has incorrect asciidoc"
|
||||
exit_code=1
|
||||
fi
|
||||
rm $TMP_ADOC
|
||||
rm "$TMP_ADOC"
|
||||
else
|
||||
echo "ERROR: no asciidoc file $RULE"
|
||||
exit_code=1
|
||||
fi
|
||||
done
|
||||
# Check that all adoc are included
|
||||
find "$dir" -name "*.adoc" -execdir sh -c 'grep -h "include::" "$1" | grep -v "rule.adoc" | sed "s/include::\(.*\)\[\]/\1/" | xargs -r -I@ realpath "$PWD/@"' shell {} \; > included
|
||||
find "$dir" -name "*.adoc" ! -name 'rule.adoc' -exec sh -c 'realpath $1' shell {} \; > created
|
||||
orphans=$(comm -1 -3 <(sort -u included) <(sort -u created))
|
||||
if [[ -n "$orphans" ]]; then
|
||||
printf 'ERROR: These adoc files are not included anywhere:\n-----\n%s\n-----\n' "$orphans"
|
||||
exit_code=1
|
||||
fi
|
||||
rm -f included created
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Finished."
|
||||
if (( $exit_code == 0 )); then
|
||||
if (( exit_code == 0 )); then
|
||||
echo "Success"
|
||||
else
|
||||
echo "There were errors"
|
||||
|
71
docs/description.adoc
Normal file
71
docs/description.adoc
Normal file
@ -0,0 +1,71 @@
|
||||
= Rule Description
|
||||
|
||||
This document describes how `+rule.adoc+` and its dependencies should be structured.
|
||||
|
||||
== Sections
|
||||
|
||||
There should be no first level titles (`+= Title+`) in your adoc.
|
||||
|
||||
The following are the only allowed second level titles for H2:
|
||||
|
||||
include::section_names.adoc[]
|
||||
|
||||
Third level titles are not checked.
|
||||
|
||||
== Parameters
|
||||
|
||||
Parameters should be listed in a subsection as follow:
|
||||
|
||||
....
|
||||
=== Parameters
|
||||
|
||||
.name
|
||||
****
|
||||
_TYPE_
|
||||
|
||||
----
|
||||
default value
|
||||
----
|
||||
|
||||
Description of what the parameter does.
|
||||
****
|
||||
|
||||
.name2
|
||||
****
|
||||
----
|
||||
another default value
|
||||
----
|
||||
Description of what this second parameter does.
|
||||
****
|
||||
|
||||
.name3
|
||||
****
|
||||
_TYPE_
|
||||
|
||||
Description of what this third parameter does.
|
||||
****
|
||||
|
||||
.name4
|
||||
****
|
||||
Description of what this fourth parameter does.
|
||||
****
|
||||
|
||||
....
|
||||
|
||||
The parameter name and the description are mandatory. The type and default value are not.
|
||||
|
||||
The parameter name with a `.` before will be the title of the block below marked by `****`.
|
||||
|
||||
We always use `----` around the default parameter to avoid having a special character confuse AsciiDoctor and to create a visual consistency for all parameters.
|
||||
|
||||
== Comment a rule
|
||||
|
||||
Comments and links that were created on Jira have been gathered in a `comments-and-links.adoc` file for each concerned rule. +
|
||||
You can add a comment anywhere in a rule by adding the following lines in the `*.adoc` file:
|
||||
[source]
|
||||
----
|
||||
\ifdef::env-github,rspecator-view[]
|
||||
John Doe (9 Jun 2021, 15:49): my comment on the rule
|
||||
\endif::env-github,rspecator-view[]
|
||||
----
|
||||
This way, your comment will only be visible in GitHub preview and on the Search Page (and will not be visible for the user).
|
23
docs/metadada.adoc
Normal file
23
docs/metadada.adoc
Normal file
@ -0,0 +1,23 @@
|
||||
= Rule Metadata
|
||||
|
||||
This document describes how `+metadata.json+` should be structured.
|
||||
|
||||
== `quickfix` field
|
||||
|
||||
Every active rule that is not a security hotspot must specify the availability of a quick fix for its issues.
|
||||
`metadata.json` must feature a `quickfix` field with one of the following values:
|
||||
|
||||
* `unknown`: the feasibility of producing a quick fix is not evaluated.
|
||||
* `infeasible`: it is not feasible to propose a quick fix for any of the issues, for whatever reason.
|
||||
* `targeted`: it is possible to implement quick fixes for this rule, but none are implemented right now.
|
||||
* `partial`: some of the issues produced by the rule propose a quick fix, but not all.
|
||||
* `covered`: all the issues produced by the rule propose a quick fix.
|
||||
|
||||
[NOTE]
|
||||
====
|
||||
A `covered` rule is still not guaranteed to provide a quick fix for a particular issue (for instance, if a fix location would be inside a macro expansion or in a different file from the issue location). The rule is said to have a `partial` quick fix only if there exists a family of issues that cannot have a quick fix.
|
||||
|
||||
For instance, on one hand, if a rule detects two functions that are dangerous to use, `A` and `B`, and `A` has an obvious replacement (and therefore a quick fix) while `B` does not, the field should be set to `partial`.
|
||||
|
||||
On the other hand, if a quick fix could be easily proposed for both `A` and `B`, but the fix location might be inside a macro expansion, or in a different file from the issue location (and hence not feasible given the current SonarLint capabilities), this should not prevent the rule from being tagged as `covered`.
|
||||
====
|
9
docs/section_names.adoc
Normal file
9
docs/section_names.adoc
Normal file
@ -0,0 +1,9 @@
|
||||
* Noncompliant Code Example
|
||||
* Compliant Solution
|
||||
* See
|
||||
* See Also
|
||||
* Exceptions
|
||||
* Sensitive Code Example
|
||||
* Ask Yourself Whether
|
||||
* Recommended Secure Coding Practices
|
||||
* Deprecated
|
@ -15,6 +15,8 @@ import { RuleMetadata } from './types';
|
||||
|
||||
import './hljs-humanoid-light.css';
|
||||
|
||||
const PARAMETER_INTERNAL_MARGIN = 0.5;
|
||||
|
||||
const useStyles = makeStyles((theme) => ({
|
||||
'@global': {
|
||||
h1: {
|
||||
@ -33,6 +35,22 @@ const useStyles = makeStyles((theme) => ({
|
||||
},
|
||||
hr: {
|
||||
color: '#F9F9FB'
|
||||
},
|
||||
'.sidebarblock': {
|
||||
'& .title': {
|
||||
marginTop: theme.spacing(2),
|
||||
color: '#25699D'
|
||||
},
|
||||
'& pre': {
|
||||
marginLeft: '1rem',
|
||||
marginTop: theme.spacing(PARAMETER_INTERNAL_MARGIN),
|
||||
marginBottom: theme.spacing(PARAMETER_INTERNAL_MARGIN)
|
||||
},
|
||||
'& p': {
|
||||
marginLeft: '1rem',
|
||||
marginTop: theme.spacing(PARAMETER_INTERNAL_MARGIN),
|
||||
marginBottom: theme.spacing(PARAMETER_INTERNAL_MARGIN)
|
||||
}
|
||||
}
|
||||
},
|
||||
ruleBar: {
|
||||
|
@ -8,7 +8,7 @@ from rspec_tools.errors import RuleNotFoundError, RuleValidationError
|
||||
from rspec_tools.create_rule import create_new_rule, add_language_to_rule
|
||||
from rspec_tools.rules import RulesRepository
|
||||
from rspec_tools.validation.metadata import validate_rule_metadata
|
||||
from rspec_tools.validation.description import validate_section_names, validate_section_levels
|
||||
from rspec_tools.validation.description import validate_section_names, validate_section_levels, validate_parameters
|
||||
from rspec_tools.coverage import update_coverage_for_all_repos, update_coverage_for_repo, update_coverage_for_repo_version
|
||||
|
||||
from rspec_tools.notify_failure_on_slack import notify_slack
|
||||
@ -70,13 +70,13 @@ def validate_rules_metadata(rules):
|
||||
@cli.command()
|
||||
@click.option('--d', required=True)
|
||||
@click.argument('rules', nargs=-1)
|
||||
def check_sections(d, rules):
|
||||
'''Validate the section names.'''
|
||||
def check_description(d, rules):
|
||||
'''Validate the rule.adoc description.'''
|
||||
out_dir = Path(__file__).parent.parent.joinpath(d)
|
||||
rule_repository = RulesRepository(rules_path=out_dir)
|
||||
error_counter = 0
|
||||
for rule in rule_repository.rules:
|
||||
if rules and rule.key not in rules:
|
||||
if rules and rule.id not in rules:
|
||||
continue
|
||||
for lang_spec_rule in rule.specializations:
|
||||
try:
|
||||
@ -89,6 +89,11 @@ def check_sections(d, rules):
|
||||
except RuleValidationError as e:
|
||||
click.echo(e.message, err=True)
|
||||
error_counter += 1
|
||||
try:
|
||||
validate_parameters(lang_spec_rule)
|
||||
except RuleValidationError as e:
|
||||
click.echo(e.message, err=True)
|
||||
error_counter += 1
|
||||
if error_counter > 0:
|
||||
fatal_error(f"Validation failed due to {error_counter} errors")
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
import json
|
||||
from bs4 import BeautifulSoup
|
||||
from pathlib import Path
|
||||
from typing import Final
|
||||
|
||||
from rspec_tools.errors import RuleValidationError
|
||||
@ -10,19 +11,12 @@ from rspec_tools.rules import LanguageSpecificRule
|
||||
# in the migrated RSPECs.
|
||||
# Further work required to shorten the list by renaming the sections in some RSPECS
|
||||
# to keep only on version for each title.
|
||||
ACCEPTED_SECTION_NAMES: Final[list[str]] = ['Noncompliant Code Example',
|
||||
'Compliant Solution',
|
||||
'See',
|
||||
'See Also',
|
||||
'Exceptions',
|
||||
'Sensitive Code Example',
|
||||
'Ask Yourself Whether',
|
||||
'Recommended Secure Coding Practices',
|
||||
'Deprecated']
|
||||
|
||||
SECTION_NAMES_PATH = Path(__file__).parent.parent.parent.parent.joinpath('docs/section_names.adoc')
|
||||
SECTION_NAMES_FILE = SECTION_NAMES_PATH.read_text(encoding='utf-8').split('\n')
|
||||
ACCEPTED_SECTION_NAMES: Final[list[str]] = [s.replace('* ', '').strip() for s in SECTION_NAMES_FILE if s.strip()]
|
||||
def validate_section_names(rule_language: LanguageSpecificRule):
|
||||
descr = rule_language.description
|
||||
for h2 in descr.findAll('h2'):
|
||||
for h2 in descr.find_all('h2'):
|
||||
name = h2.text.strip()
|
||||
if name not in ACCEPTED_SECTION_NAMES:
|
||||
raise RuleValidationError(f'Rule {rule_language.id} has unconventional header "{name}"')
|
||||
@ -32,3 +26,24 @@ def validate_section_levels(rule_language: LanguageSpecificRule):
|
||||
if h1 is not None:
|
||||
name = h1.text.strip()
|
||||
raise RuleValidationError(f'Rule {rule_language.id} has level-0 header "{name}"')
|
||||
|
||||
def validate_one_parameter(child, id):
|
||||
if child.name != 'div' or child['class'][0] != 'sidebarblock':
|
||||
raise RuleValidationError(f'Rule {id} should use `****` blocks for each parameter')
|
||||
for div_child in child.children:
|
||||
if div_child.name is not None:
|
||||
if div_child['class'][0] != 'content':
|
||||
raise RuleValidationError(f'Rule {id} should use `****` blocks for each parameter')
|
||||
if div_child.p is None:
|
||||
raise RuleValidationError(f'Rule {id} should have a description for each parameter')
|
||||
if div_child.find('div', 'title') is None:
|
||||
raise RuleValidationError(f'Rule {id} should have a parameter name declared with `.name` before the bock, for each parameter')
|
||||
|
||||
def validate_parameters(rule_language: LanguageSpecificRule):
|
||||
for h3 in rule_language.description.find_all('h3'):
|
||||
name = h3.text.strip()
|
||||
if name == 'Parameters':
|
||||
for child in h3.parent.children:
|
||||
if child.name is None or child == h3 or child.name == 'hr':
|
||||
continue
|
||||
validate_one_parameter(child, rule_language.id)
|
||||
|
@ -7,3 +7,8 @@ import pytest
|
||||
def mockrules():
|
||||
'''Provides a path to test rules resources.'''
|
||||
return Path(__file__).parent.joinpath('resources', 'rules')
|
||||
|
||||
@pytest.fixture
|
||||
def mockinvalidrules():
|
||||
'''Provides a path to test rules resources.'''
|
||||
return Path(__file__).parent.joinpath('resources', 'invalid-rules')
|
||||
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"title": "Function names should comply with a naming convention",
|
||||
"defaultQualityProfiles": [
|
||||
|
||||
]
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
= Invalid header level
|
||||
|
||||
Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.
|
||||
|
||||
== Invalid header
|
||||
|
||||
== Noncompliant Code Example
|
||||
|
||||
With default provided regular expression: ``++^[a-z][a-zA-Z0-9]*$++``:
|
||||
|
||||
----
|
||||
void DoSomething (void);
|
||||
----
|
||||
|
||||
=== Parameters
|
||||
|
||||
*format*: STRING [ `+^([A-Z0-9_]*|[a-z0-9_]*)$+` ]
|
||||
Regular expression used to check the [method|function|subroutine] names against
|
||||
|
||||
*param2*: INTEGER [ `+42+` ]::
|
||||
Some integer
|
@ -0,0 +1,53 @@
|
||||
<body class="book">
|
||||
<div id="header">
|
||||
<h1>Invalid header level</h1>
|
||||
</div>
|
||||
<div id="content">
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_invalid_header">Invalid header</h2>
|
||||
<div class="sectionbody">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With default provided regular expression: <code>^[a-z][a-zA-Z0-9]*$</code>:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>void DoSomething (void);</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_parameters">Parameters</h3>
|
||||
<div class="paragraph">
|
||||
<p><strong>format</strong>: STRING [ <code>^([A-Z0-9_]*|[a-z0-9_]*)$</code> ]
|
||||
Regular expression used to check the [method|function|subroutine] names against</p>
|
||||
</div>
|
||||
<div class="dlist">
|
||||
<dl>
|
||||
<dt class="hdlist1"><strong>param2</strong>: INTEGER [ <code>42</code> ]</dt>
|
||||
<dd>
|
||||
<p>Some integer</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Last updated 2022-01-28 19:05:40 +0100
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"title": "Function names should comply with a naming convention",
|
||||
"defaultQualityProfiles": [
|
||||
|
||||
]
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
= Invalid header level
|
||||
|
||||
Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.
|
||||
|
||||
== Invalid header
|
||||
|
||||
== Noncompliant Code Example
|
||||
|
||||
With default provided regular expression: ``++^[a-z][a-zA-Z0-9]*$++``:
|
||||
|
||||
----
|
||||
void DoSomething (void);
|
||||
----
|
||||
|
||||
=== Parameters
|
||||
|
||||
****
|
||||
*format*
|
||||
_STRING_
|
||||
----
|
||||
^([A-Z0-9_]*|[a-z0-9_]*)$
|
||||
----
|
||||
|
||||
Regular expression used to check the [method|function|subroutine] names against
|
||||
****
|
@ -0,0 +1,45 @@
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_invalid_header">Invalid header</h2>
|
||||
<div class="sectionbody">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With default provided regular expression: <code>^[a-z][a-zA-Z0-9]*$</code>:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>void DoSomething (void);</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_parameters">Parameters</h3>
|
||||
<div class="sidebarblock">
|
||||
<div class="content">
|
||||
<div class="paragraph">
|
||||
<p><strong>format</strong>
|
||||
<em>STRING</em></p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>^([A-Z0-9_]*|[a-z0-9_]*)$</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Regular expression used to check the [method|function|subroutine] names against</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"title": "Function names should comply with a naming convention",
|
||||
"defaultQualityProfiles": [
|
||||
|
||||
]
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
= Invalid header level
|
||||
|
||||
Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.
|
||||
|
||||
== Invalid header
|
||||
|
||||
== Noncompliant Code Example
|
||||
|
||||
With default provided regular expression: ``++^[a-z][a-zA-Z0-9]*$++``:
|
||||
|
||||
----
|
||||
void DoSomething (void);
|
||||
----
|
||||
|
||||
=== Parameters
|
||||
|
||||
.format
|
||||
****
|
||||
----
|
||||
^([A-Z0-9_]*|[a-z0-9_]*)$
|
||||
----
|
||||
****
|
@ -0,0 +1,39 @@
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_invalid_header">Invalid header</h2>
|
||||
<div class="sectionbody">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With default provided regular expression: <code>^[a-z][a-zA-Z0-9]*$</code>:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>void DoSomething (void);</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_parameters">Parameters</h3>
|
||||
<div class="sidebarblock">
|
||||
<div class="content">
|
||||
<div class="title">format</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>^([A-Z0-9_]*|[a-z0-9_]*)$</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,447 +1,3 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<meta name="generator" content="Asciidoctor 2.0.12"/>
|
||||
<title>Noncompliant Code Example</title>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"/>
|
||||
<style>
|
||||
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
|
||||
/* Uncomment @import statement to use as custom stylesheet */
|
||||
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
|
||||
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
|
||||
audio,video{display:inline-block}
|
||||
audio:not([controls]){display:none;height:0}
|
||||
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
|
||||
a{background:none}
|
||||
a:focus{outline:thin dotted}
|
||||
a:active,a:hover{outline:0}
|
||||
h1{font-size:2em;margin:.67em 0}
|
||||
abbr[title]{border-bottom:1px dotted}
|
||||
b,strong{font-weight:bold}
|
||||
dfn{font-style:italic}
|
||||
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
|
||||
mark{background:#ff0;color:#000}
|
||||
code,kbd,pre,samp{font-family:monospace;font-size:1em}
|
||||
pre{white-space:pre-wrap}
|
||||
q{quotes:"\201C" "\201D" "\2018" "\2019"}
|
||||
small{font-size:80%}
|
||||
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
|
||||
sup{top:-.5em}
|
||||
sub{bottom:-.25em}
|
||||
img{border:0}
|
||||
svg:not(:root){overflow:hidden}
|
||||
figure{margin:0}
|
||||
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
|
||||
legend{border:0;padding:0}
|
||||
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
|
||||
button,input{line-height:normal}
|
||||
button,select{text-transform:none}
|
||||
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
|
||||
button[disabled],html input[disabled]{cursor:default}
|
||||
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
|
||||
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
|
||||
textarea{overflow:auto;vertical-align:top}
|
||||
table{border-collapse:collapse;border-spacing:0}
|
||||
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
|
||||
html,body{font-size:100%}
|
||||
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
|
||||
a:hover{cursor:pointer}
|
||||
img,object,embed{max-width:100%;height:auto}
|
||||
object,embed{height:100%}
|
||||
img{-ms-interpolation-mode:bicubic}
|
||||
.left{float:left!important}
|
||||
.right{float:right!important}
|
||||
.text-left{text-align:left!important}
|
||||
.text-right{text-align:right!important}
|
||||
.text-center{text-align:center!important}
|
||||
.text-justify{text-align:justify!important}
|
||||
.hide{display:none}
|
||||
img,object,svg{display:inline-block;vertical-align:middle}
|
||||
textarea{height:auto;min-height:50px}
|
||||
select{width:100%}
|
||||
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
|
||||
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
|
||||
a{color:#2156a5;text-decoration:underline;line-height:inherit}
|
||||
a:hover,a:focus{color:#1d4b8f}
|
||||
a img{border:0}
|
||||
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
|
||||
p aside{font-size:.875em;line-height:1.35;font-style:italic}
|
||||
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
|
||||
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
|
||||
h1{font-size:2.125em}
|
||||
h2{font-size:1.6875em}
|
||||
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
|
||||
h4,h5{font-size:1.125em}
|
||||
h6{font-size:1em}
|
||||
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
|
||||
em,i{font-style:italic;line-height:inherit}
|
||||
strong,b{font-weight:bold;line-height:inherit}
|
||||
small{font-size:60%;line-height:inherit}
|
||||
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
|
||||
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
|
||||
ul,ol{margin-left:1.5em}
|
||||
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
|
||||
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
|
||||
ul.square{list-style-type:square}
|
||||
ul.circle{list-style-type:circle}
|
||||
ul.disc{list-style-type:disc}
|
||||
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
|
||||
dl dt{margin-bottom:.3125em;font-weight:bold}
|
||||
dl dd{margin-bottom:1.25em}
|
||||
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
|
||||
abbr{text-transform:none}
|
||||
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
|
||||
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
|
||||
blockquote cite::before{content:"\2014 \0020"}
|
||||
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
|
||||
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
|
||||
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
|
||||
h1{font-size:2.75em}
|
||||
h2{font-size:2.3125em}
|
||||
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
|
||||
h4{font-size:1.4375em}}
|
||||
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
|
||||
table thead,table tfoot{background:#f7f8f7}
|
||||
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
|
||||
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
|
||||
table tr.even,table tr.alt{background:#f8f8f7}
|
||||
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
|
||||
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
|
||||
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
|
||||
.center{margin-left:auto;margin-right:auto}
|
||||
.stretch{width:100%}
|
||||
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
|
||||
.clearfix::after,.float-group::after{clear:both}
|
||||
:not(pre).nobreak{word-wrap:normal}
|
||||
:not(pre).nowrap{white-space:nowrap}
|
||||
:not(pre).pre-wrap{white-space:pre-wrap}
|
||||
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
|
||||
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
|
||||
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
|
||||
pre>code{display:block}
|
||||
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
|
||||
em em{font-style:normal}
|
||||
strong strong{font-weight:400}
|
||||
.keyseq{color:rgba(51,51,51,.8)}
|
||||
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
|
||||
.keyseq kbd:first-child{margin-left:0}
|
||||
.keyseq kbd:last-child{margin-right:0}
|
||||
.menuseq,.menuref{color:#000}
|
||||
.menuseq b:not(.caret),.menuref{font-weight:inherit}
|
||||
.menuseq{word-spacing:-.02em}
|
||||
.menuseq b.caret{font-size:1.25em;line-height:.8}
|
||||
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
|
||||
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
|
||||
b.button::before{content:"[";padding:0 3px 0 2px}
|
||||
b.button::after{content:"]";padding:0 2px 0 3px}
|
||||
p a>code:hover{color:rgba(0,0,0,.9)}
|
||||
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
|
||||
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
|
||||
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
|
||||
#content{margin-top:1.25em}
|
||||
#content::before{content:none}
|
||||
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
|
||||
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
|
||||
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
|
||||
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
|
||||
#header .details span:first-child{margin-left:-.125em}
|
||||
#header .details span.email a{color:rgba(0,0,0,.85)}
|
||||
#header .details br{display:none}
|
||||
#header .details br+span::before{content:"\00a0\2013\00a0"}
|
||||
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
|
||||
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
|
||||
#header #revnumber{text-transform:capitalize}
|
||||
#header #revnumber::after{content:"\00a0"}
|
||||
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
|
||||
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
|
||||
#toc>ul{margin-left:.125em}
|
||||
#toc ul.sectlevel0>li>a{font-style:italic}
|
||||
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
|
||||
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
|
||||
#toc li{line-height:1.3334;margin-top:.3334em}
|
||||
#toc a{text-decoration:none}
|
||||
#toc a:active{text-decoration:underline}
|
||||
#toctitle{color:#7a2518;font-size:1.2em}
|
||||
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
|
||||
body.toc2{padding-left:15em;padding-right:0}
|
||||
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
|
||||
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
|
||||
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
|
||||
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
|
||||
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
|
||||
body.toc2.toc-right{padding-left:0;padding-right:15em}
|
||||
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
|
||||
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
|
||||
#toc.toc2{width:20em}
|
||||
#toc.toc2 #toctitle{font-size:1.375em}
|
||||
#toc.toc2>ul{font-size:.95em}
|
||||
#toc.toc2 ul ul{padding-left:1.25em}
|
||||
body.toc2.toc-right{padding-left:0;padding-right:20em}}
|
||||
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
|
||||
#content #toc>:first-child{margin-top:0}
|
||||
#content #toc>:last-child{margin-bottom:0}
|
||||
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
|
||||
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
|
||||
#content{margin-bottom:.625em}
|
||||
.sect1{padding-bottom:.625em}
|
||||
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
|
||||
.sect1{padding-bottom:1.25em}}
|
||||
.sect1:last-child{padding-bottom:0}
|
||||
.sect1+.sect1{border-top:1px solid #e7e7e9}
|
||||
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
|
||||
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
|
||||
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
|
||||
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
|
||||
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
|
||||
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
|
||||
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
|
||||
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
|
||||
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
|
||||
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
|
||||
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
|
||||
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
|
||||
.admonitionblock>table td.icon{text-align:center;width:80px}
|
||||
.admonitionblock>table td.icon img{max-width:none}
|
||||
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
|
||||
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
|
||||
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
|
||||
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
|
||||
.exampleblock>.content>:first-child{margin-top:0}
|
||||
.exampleblock>.content>:last-child{margin-bottom:0}
|
||||
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
|
||||
.sidebarblock>:first-child{margin-top:0}
|
||||
.sidebarblock>:last-child{margin-bottom:0}
|
||||
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
|
||||
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
|
||||
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
|
||||
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
|
||||
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
|
||||
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
|
||||
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
|
||||
.listingblock>.content{position:relative}
|
||||
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
|
||||
.listingblock:hover code[data-lang]::before{display:block}
|
||||
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
|
||||
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
|
||||
.listingblock pre.highlightjs{padding:0}
|
||||
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
|
||||
.listingblock pre.prettyprint{border-width:0}
|
||||
.prettyprint{background:#f7f7f8}
|
||||
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
|
||||
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
|
||||
pre.prettyprint li code[data-lang]::before{opacity:1}
|
||||
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
|
||||
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
|
||||
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
|
||||
table.linenotable td.code{padding-left:.75em}
|
||||
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
|
||||
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
|
||||
pre.pygments .lineno::before{content:"";margin-right:-.125em}
|
||||
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
|
||||
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
|
||||
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
|
||||
.quoteblock blockquote{margin:0;padding:0;border:0}
|
||||
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
|
||||
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
|
||||
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
|
||||
.verseblock{margin:0 1em 1.25em}
|
||||
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
|
||||
.verseblock pre strong{font-weight:400}
|
||||
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
|
||||
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
|
||||
.quoteblock .attribution br,.verseblock .attribution br{display:none}
|
||||
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
|
||||
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
|
||||
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
|
||||
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
|
||||
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
|
||||
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
|
||||
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
|
||||
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
|
||||
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
|
||||
p.tableblock:last-child{margin-bottom:0}
|
||||
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
|
||||
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
|
||||
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
|
||||
table.grid-all>*>tr>*{border-width:1px}
|
||||
table.grid-cols>*>tr>*{border-width:0 1px}
|
||||
table.grid-rows>*>tr>*{border-width:1px 0}
|
||||
table.frame-all{border-width:1px}
|
||||
table.frame-ends{border-width:1px 0}
|
||||
table.frame-sides{border-width:0 1px}
|
||||
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
|
||||
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
|
||||
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
|
||||
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
|
||||
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
|
||||
th.halign-left,td.halign-left{text-align:left}
|
||||
th.halign-right,td.halign-right{text-align:right}
|
||||
th.halign-center,td.halign-center{text-align:center}
|
||||
th.valign-top,td.valign-top{vertical-align:top}
|
||||
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
|
||||
th.valign-middle,td.valign-middle{vertical-align:middle}
|
||||
table thead th,table tfoot th{font-weight:bold}
|
||||
tbody tr th{background:#f7f8f7}
|
||||
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
|
||||
p.tableblock>code:only-child{background:none;padding:0}
|
||||
p.tableblock{font-size:1em}
|
||||
ol{margin-left:1.75em}
|
||||
ul li ol{margin-left:1.5em}
|
||||
dl dd{margin-left:1.125em}
|
||||
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
|
||||
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
|
||||
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
|
||||
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
|
||||
ul.unstyled,ol.unstyled{margin-left:0}
|
||||
ul.checklist{margin-left:.625em}
|
||||
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
|
||||
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
|
||||
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
|
||||
ul.inline>li{margin-left:1.25em}
|
||||
.unstyled dl dt{font-weight:400;font-style:normal}
|
||||
ol.arabic{list-style-type:decimal}
|
||||
ol.decimal{list-style-type:decimal-leading-zero}
|
||||
ol.loweralpha{list-style-type:lower-alpha}
|
||||
ol.upperalpha{list-style-type:upper-alpha}
|
||||
ol.lowerroman{list-style-type:lower-roman}
|
||||
ol.upperroman{list-style-type:upper-roman}
|
||||
ol.lowergreek{list-style-type:lower-greek}
|
||||
.hdlist>table,.colist>table{border:0;background:none}
|
||||
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
|
||||
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
|
||||
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
|
||||
td.hdlist2{word-wrap:anywhere}
|
||||
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
|
||||
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
|
||||
.colist td:not([class]):first-child img{max-width:none}
|
||||
.colist td:not([class]):last-child{padding:.25em 0}
|
||||
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
|
||||
.imageblock.left{margin:.25em .625em 1.25em 0}
|
||||
.imageblock.right{margin:.25em 0 1.25em .625em}
|
||||
.imageblock>.title{margin-bottom:0}
|
||||
.imageblock.thumb,.imageblock.th{border-width:6px}
|
||||
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
|
||||
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
|
||||
.image.left{margin-right:.625em}
|
||||
.image.right{margin-left:.625em}
|
||||
a.image{text-decoration:none;display:inline-block}
|
||||
a.image object{pointer-events:none}
|
||||
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
|
||||
sup.footnote a,sup.footnoteref a{text-decoration:none}
|
||||
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
|
||||
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
|
||||
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
|
||||
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
|
||||
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
|
||||
#footnotes .footnote:last-of-type{margin-bottom:0}
|
||||
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
|
||||
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
|
||||
.gist .file-data>table td.line-data{width:99%}
|
||||
div.unbreakable{page-break-inside:avoid}
|
||||
.big{font-size:larger}
|
||||
.small{font-size:smaller}
|
||||
.underline{text-decoration:underline}
|
||||
.overline{text-decoration:overline}
|
||||
.line-through{text-decoration:line-through}
|
||||
.aqua{color:#00bfbf}
|
||||
.aqua-background{background:#00fafa}
|
||||
.black{color:#000}
|
||||
.black-background{background:#000}
|
||||
.blue{color:#0000bf}
|
||||
.blue-background{background:#0000fa}
|
||||
.fuchsia{color:#bf00bf}
|
||||
.fuchsia-background{background:#fa00fa}
|
||||
.gray{color:#606060}
|
||||
.gray-background{background:#7d7d7d}
|
||||
.green{color:#006000}
|
||||
.green-background{background:#007d00}
|
||||
.lime{color:#00bf00}
|
||||
.lime-background{background:#00fa00}
|
||||
.maroon{color:#600000}
|
||||
.maroon-background{background:#7d0000}
|
||||
.navy{color:#000060}
|
||||
.navy-background{background:#00007d}
|
||||
.olive{color:#606000}
|
||||
.olive-background{background:#7d7d00}
|
||||
.purple{color:#600060}
|
||||
.purple-background{background:#7d007d}
|
||||
.red{color:#bf0000}
|
||||
.red-background{background:#fa0000}
|
||||
.silver{color:#909090}
|
||||
.silver-background{background:#bcbcbc}
|
||||
.teal{color:#006060}
|
||||
.teal-background{background:#007d7d}
|
||||
.white{color:#bfbfbf}
|
||||
.white-background{background:#fafafa}
|
||||
.yellow{color:#bfbf00}
|
||||
.yellow-background{background:#fafa00}
|
||||
span.icon>.fa{cursor:default}
|
||||
a span.icon>.fa{cursor:inherit}
|
||||
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
|
||||
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
|
||||
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
|
||||
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
|
||||
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
|
||||
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
|
||||
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
|
||||
.conum[data-value] *{color:#fff!important}
|
||||
.conum[data-value]+b{display:none}
|
||||
.conum[data-value]::after{content:attr(data-value)}
|
||||
pre .conum[data-value]{position:relative;top:-.125em}
|
||||
b.conum *{color:inherit!important}
|
||||
.conum:not([data-value]):empty{display:none}
|
||||
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
|
||||
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
|
||||
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
|
||||
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
|
||||
p{margin-bottom:1.25rem}
|
||||
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
|
||||
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
|
||||
.print-only{display:none!important}
|
||||
@page{margin:1.25cm .75cm}
|
||||
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
|
||||
html{font-size:80%}
|
||||
a{color:inherit!important;text-decoration:underline!important}
|
||||
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
|
||||
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
|
||||
abbr[title]::after{content:" (" attr(title) ")"}
|
||||
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
|
||||
thead{display:table-header-group}
|
||||
svg{max-width:100%}
|
||||
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
|
||||
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
|
||||
#header,#content,#footnotes,#footer{max-width:none}
|
||||
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
|
||||
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
|
||||
body.book #header{text-align:center}
|
||||
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
|
||||
body.book #header .details{border:0!important;display:block;padding:0!important}
|
||||
body.book #header .details span:first-child{margin-left:0!important}
|
||||
body.book #header .details br{display:block}
|
||||
body.book #header .details br+span::before{content:none!important}
|
||||
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
|
||||
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
|
||||
.listingblock code[data-lang]::before{display:block}
|
||||
#footer{padding:0 .9375em}
|
||||
.hide-on-print{display:none!important}
|
||||
.print-only{display:block!important}
|
||||
.hide-for-print{display:none!important}
|
||||
.show-for-print{display:inherit!important}}
|
||||
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
|
||||
.sect1{padding:0!important}
|
||||
.sect1+.sect1{border:0}
|
||||
#footer{background:none}
|
||||
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
|
||||
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
|
||||
</style>
|
||||
</head>
|
||||
<body class="article">
|
||||
<div id="header">
|
||||
</div>
|
||||
<div id="content">
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
@ -472,11 +28,3 @@ ENDMETHOD.</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Last updated 2021-01-28 17:34:39 +0100
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
26
rspec-tools/tests/resources/rules/S100/apex/rule.html
Normal file
26
rspec-tools/tests/resources/rules/S100/apex/rule.html
Normal file
@ -0,0 +1,26 @@
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With provided regular expression <code>^[a-z][a-zA-Z0-9_]*$</code>:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>public void DoSomething(){...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_compliant_solution">Compliant Solution</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>public void doSomething(){...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -13,3 +13,25 @@ void DoSomething (void);
|
||||
----
|
||||
void doSomething (void);
|
||||
----
|
||||
|
||||
=== Parameters
|
||||
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^([A-Z0-9_]*|[a-z0-9_]*)$
|
||||
----
|
||||
|
||||
Regular expression used to check the [method|function|subroutine] names against
|
||||
****
|
||||
|
||||
.param2
|
||||
****
|
||||
----
|
||||
42
|
||||
----
|
||||
|
||||
Some integer
|
||||
****
|
||||
|
@ -1,4 +1,3 @@
|
||||
<body>
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
@ -23,6 +22,37 @@
|
||||
<pre>void doSomething (void);</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_parameters">Parameters</h3>
|
||||
<div class="sidebarblock">
|
||||
<div class="content">
|
||||
<div class="title">format</div>
|
||||
<div class="paragraph">
|
||||
<p><em>STRING</em></p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>^([A-Z0-9_]*|[a-z0-9_]*)$</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Regular expression used to check the [method|function|subroutine] names against</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebarblock">
|
||||
<div class="content">
|
||||
<div class="title">param2</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>42</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Some integer</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
58
rspec-tools/tests/resources/rules/S100/csharp/rule.html
Normal file
58
rspec-tools/tests/resources/rules/S100/csharp/rule.html
Normal file
@ -0,0 +1,58 @@
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks whether or not method and property names are PascalCased. To reduce noise, two consecutive upper case characters are allowed unless they form the whole name. So, <code>MyXMethod</code> is compliant, but <code>XM</code> on its own is not.</p>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>public int doSomething() {...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_compliant_solution">Compliant Solution</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>public int DoSomething() {...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_exceptions">Exceptions</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="ulist">
|
||||
<ul>
|
||||
<li>
|
||||
<p>The rule ignores members in types that are marked with <code>ComImportAttribute</code> or <code>InterfaceTypeAttribute</code>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The rule ignores <code>extern</code> methods.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The rule allows for two-letter acronyms in which both letters are capitalized, as shown in the following identifier: <code>ExecuteOnUIThread</code>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Furthermore, when <code>'_'</code> character is found in a name, the camel casing is not enforced.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>void My_method(){...} // valid
|
||||
void My_method_(){...} // invalid, leading and trailing underscores are reported</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_see">See</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p><a href="https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/capitalization-conventions">Microsoft Capitalization Conventions</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
26
rspec-tools/tests/resources/rules/S100/flex/rule.html
Normal file
26
rspec-tools/tests/resources/rules/S100/flex/rule.html
Normal file
@ -0,0 +1,26 @@
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With default provided regular expression: ^[a-z][a-zA-Z0-9]*$</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>function DoSomething(){...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_compliant_solution">Compliant Solution</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>function doSomething(){...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
30
rspec-tools/tests/resources/rules/S100/go/rule.html
Normal file
30
rspec-tools/tests/resources/rules/S100/go/rule.html
Normal file
@ -0,0 +1,30 @@
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With default provided regular expression: <code>^(_|[a-zA-Z0-9]+)$</code>:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>func execute_all() {
|
||||
...
|
||||
}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_compliant_solution">Compliant Solution</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>func executeAll() {
|
||||
...
|
||||
}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,447 +1,3 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="generator" content="Asciidoctor 2.0.12">
|
||||
<title>Noncompliant Code Example</title>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
|
||||
<style>
|
||||
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
|
||||
/* Uncomment @import statement to use as custom stylesheet */
|
||||
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
|
||||
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
|
||||
audio,video{display:inline-block}
|
||||
audio:not([controls]){display:none;height:0}
|
||||
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
|
||||
a{background:none}
|
||||
a:focus{outline:thin dotted}
|
||||
a:active,a:hover{outline:0}
|
||||
h1{font-size:2em;margin:.67em 0}
|
||||
abbr[title]{border-bottom:1px dotted}
|
||||
b,strong{font-weight:bold}
|
||||
dfn{font-style:italic}
|
||||
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
|
||||
mark{background:#ff0;color:#000}
|
||||
code,kbd,pre,samp{font-family:monospace;font-size:1em}
|
||||
pre{white-space:pre-wrap}
|
||||
q{quotes:"\201C" "\201D" "\2018" "\2019"}
|
||||
small{font-size:80%}
|
||||
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
|
||||
sup{top:-.5em}
|
||||
sub{bottom:-.25em}
|
||||
img{border:0}
|
||||
svg:not(:root){overflow:hidden}
|
||||
figure{margin:0}
|
||||
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
|
||||
legend{border:0;padding:0}
|
||||
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
|
||||
button,input{line-height:normal}
|
||||
button,select{text-transform:none}
|
||||
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
|
||||
button[disabled],html input[disabled]{cursor:default}
|
||||
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
|
||||
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
|
||||
textarea{overflow:auto;vertical-align:top}
|
||||
table{border-collapse:collapse;border-spacing:0}
|
||||
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
|
||||
html,body{font-size:100%}
|
||||
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
|
||||
a:hover{cursor:pointer}
|
||||
img,object,embed{max-width:100%;height:auto}
|
||||
object,embed{height:100%}
|
||||
img{-ms-interpolation-mode:bicubic}
|
||||
.left{float:left!important}
|
||||
.right{float:right!important}
|
||||
.text-left{text-align:left!important}
|
||||
.text-right{text-align:right!important}
|
||||
.text-center{text-align:center!important}
|
||||
.text-justify{text-align:justify!important}
|
||||
.hide{display:none}
|
||||
img,object,svg{display:inline-block;vertical-align:middle}
|
||||
textarea{height:auto;min-height:50px}
|
||||
select{width:100%}
|
||||
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
|
||||
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
|
||||
a{color:#2156a5;text-decoration:underline;line-height:inherit}
|
||||
a:hover,a:focus{color:#1d4b8f}
|
||||
a img{border:0}
|
||||
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
|
||||
p aside{font-size:.875em;line-height:1.35;font-style:italic}
|
||||
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
|
||||
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
|
||||
h1{font-size:2.125em}
|
||||
h2{font-size:1.6875em}
|
||||
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
|
||||
h4,h5{font-size:1.125em}
|
||||
h6{font-size:1em}
|
||||
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
|
||||
em,i{font-style:italic;line-height:inherit}
|
||||
strong,b{font-weight:bold;line-height:inherit}
|
||||
small{font-size:60%;line-height:inherit}
|
||||
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
|
||||
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
|
||||
ul,ol{margin-left:1.5em}
|
||||
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
|
||||
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
|
||||
ul.square{list-style-type:square}
|
||||
ul.circle{list-style-type:circle}
|
||||
ul.disc{list-style-type:disc}
|
||||
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
|
||||
dl dt{margin-bottom:.3125em;font-weight:bold}
|
||||
dl dd{margin-bottom:1.25em}
|
||||
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
|
||||
abbr{text-transform:none}
|
||||
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
|
||||
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
|
||||
blockquote cite::before{content:"\2014 \0020"}
|
||||
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
|
||||
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
|
||||
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
|
||||
h1{font-size:2.75em}
|
||||
h2{font-size:2.3125em}
|
||||
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
|
||||
h4{font-size:1.4375em}}
|
||||
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
|
||||
table thead,table tfoot{background:#f7f8f7}
|
||||
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
|
||||
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
|
||||
table tr.even,table tr.alt{background:#f8f8f7}
|
||||
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
|
||||
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
|
||||
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
|
||||
.center{margin-left:auto;margin-right:auto}
|
||||
.stretch{width:100%}
|
||||
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
|
||||
.clearfix::after,.float-group::after{clear:both}
|
||||
:not(pre).nobreak{word-wrap:normal}
|
||||
:not(pre).nowrap{white-space:nowrap}
|
||||
:not(pre).pre-wrap{white-space:pre-wrap}
|
||||
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
|
||||
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
|
||||
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
|
||||
pre>code{display:block}
|
||||
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
|
||||
em em{font-style:normal}
|
||||
strong strong{font-weight:400}
|
||||
.keyseq{color:rgba(51,51,51,.8)}
|
||||
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
|
||||
.keyseq kbd:first-child{margin-left:0}
|
||||
.keyseq kbd:last-child{margin-right:0}
|
||||
.menuseq,.menuref{color:#000}
|
||||
.menuseq b:not(.caret),.menuref{font-weight:inherit}
|
||||
.menuseq{word-spacing:-.02em}
|
||||
.menuseq b.caret{font-size:1.25em;line-height:.8}
|
||||
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
|
||||
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
|
||||
b.button::before{content:"[";padding:0 3px 0 2px}
|
||||
b.button::after{content:"]";padding:0 2px 0 3px}
|
||||
p a>code:hover{color:rgba(0,0,0,.9)}
|
||||
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
|
||||
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
|
||||
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
|
||||
#content{margin-top:1.25em}
|
||||
#content::before{content:none}
|
||||
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
|
||||
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
|
||||
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
|
||||
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
|
||||
#header .details span:first-child{margin-left:-.125em}
|
||||
#header .details span.email a{color:rgba(0,0,0,.85)}
|
||||
#header .details br{display:none}
|
||||
#header .details br+span::before{content:"\00a0\2013\00a0"}
|
||||
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
|
||||
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
|
||||
#header #revnumber{text-transform:capitalize}
|
||||
#header #revnumber::after{content:"\00a0"}
|
||||
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
|
||||
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
|
||||
#toc>ul{margin-left:.125em}
|
||||
#toc ul.sectlevel0>li>a{font-style:italic}
|
||||
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
|
||||
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
|
||||
#toc li{line-height:1.3334;margin-top:.3334em}
|
||||
#toc a{text-decoration:none}
|
||||
#toc a:active{text-decoration:underline}
|
||||
#toctitle{color:#7a2518;font-size:1.2em}
|
||||
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
|
||||
body.toc2{padding-left:15em;padding-right:0}
|
||||
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
|
||||
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
|
||||
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
|
||||
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
|
||||
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
|
||||
body.toc2.toc-right{padding-left:0;padding-right:15em}
|
||||
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
|
||||
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
|
||||
#toc.toc2{width:20em}
|
||||
#toc.toc2 #toctitle{font-size:1.375em}
|
||||
#toc.toc2>ul{font-size:.95em}
|
||||
#toc.toc2 ul ul{padding-left:1.25em}
|
||||
body.toc2.toc-right{padding-left:0;padding-right:20em}}
|
||||
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
|
||||
#content #toc>:first-child{margin-top:0}
|
||||
#content #toc>:last-child{margin-bottom:0}
|
||||
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
|
||||
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
|
||||
#content{margin-bottom:.625em}
|
||||
.sect1{padding-bottom:.625em}
|
||||
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
|
||||
.sect1{padding-bottom:1.25em}}
|
||||
.sect1:last-child{padding-bottom:0}
|
||||
.sect1+.sect1{border-top:1px solid #e7e7e9}
|
||||
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
|
||||
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
|
||||
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
|
||||
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
|
||||
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
|
||||
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
|
||||
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
|
||||
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
|
||||
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
|
||||
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
|
||||
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
|
||||
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
|
||||
.admonitionblock>table td.icon{text-align:center;width:80px}
|
||||
.admonitionblock>table td.icon img{max-width:none}
|
||||
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
|
||||
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
|
||||
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
|
||||
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
|
||||
.exampleblock>.content>:first-child{margin-top:0}
|
||||
.exampleblock>.content>:last-child{margin-bottom:0}
|
||||
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
|
||||
.sidebarblock>:first-child{margin-top:0}
|
||||
.sidebarblock>:last-child{margin-bottom:0}
|
||||
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
|
||||
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
|
||||
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
|
||||
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
|
||||
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
|
||||
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
|
||||
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
|
||||
.listingblock>.content{position:relative}
|
||||
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
|
||||
.listingblock:hover code[data-lang]::before{display:block}
|
||||
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
|
||||
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
|
||||
.listingblock pre.highlightjs{padding:0}
|
||||
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
|
||||
.listingblock pre.prettyprint{border-width:0}
|
||||
.prettyprint{background:#f7f7f8}
|
||||
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
|
||||
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
|
||||
pre.prettyprint li code[data-lang]::before{opacity:1}
|
||||
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
|
||||
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
|
||||
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
|
||||
table.linenotable td.code{padding-left:.75em}
|
||||
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
|
||||
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
|
||||
pre.pygments .lineno::before{content:"";margin-right:-.125em}
|
||||
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
|
||||
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
|
||||
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
|
||||
.quoteblock blockquote{margin:0;padding:0;border:0}
|
||||
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
|
||||
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
|
||||
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
|
||||
.verseblock{margin:0 1em 1.25em}
|
||||
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
|
||||
.verseblock pre strong{font-weight:400}
|
||||
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
|
||||
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
|
||||
.quoteblock .attribution br,.verseblock .attribution br{display:none}
|
||||
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
|
||||
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
|
||||
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
|
||||
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
|
||||
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
|
||||
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
|
||||
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
|
||||
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
|
||||
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
|
||||
p.tableblock:last-child{margin-bottom:0}
|
||||
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
|
||||
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
|
||||
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
|
||||
table.grid-all>*>tr>*{border-width:1px}
|
||||
table.grid-cols>*>tr>*{border-width:0 1px}
|
||||
table.grid-rows>*>tr>*{border-width:1px 0}
|
||||
table.frame-all{border-width:1px}
|
||||
table.frame-ends{border-width:1px 0}
|
||||
table.frame-sides{border-width:0 1px}
|
||||
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
|
||||
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
|
||||
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
|
||||
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
|
||||
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
|
||||
th.halign-left,td.halign-left{text-align:left}
|
||||
th.halign-right,td.halign-right{text-align:right}
|
||||
th.halign-center,td.halign-center{text-align:center}
|
||||
th.valign-top,td.valign-top{vertical-align:top}
|
||||
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
|
||||
th.valign-middle,td.valign-middle{vertical-align:middle}
|
||||
table thead th,table tfoot th{font-weight:bold}
|
||||
tbody tr th{background:#f7f8f7}
|
||||
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
|
||||
p.tableblock>code:only-child{background:none;padding:0}
|
||||
p.tableblock{font-size:1em}
|
||||
ol{margin-left:1.75em}
|
||||
ul li ol{margin-left:1.5em}
|
||||
dl dd{margin-left:1.125em}
|
||||
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
|
||||
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
|
||||
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
|
||||
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
|
||||
ul.unstyled,ol.unstyled{margin-left:0}
|
||||
ul.checklist{margin-left:.625em}
|
||||
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
|
||||
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
|
||||
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
|
||||
ul.inline>li{margin-left:1.25em}
|
||||
.unstyled dl dt{font-weight:400;font-style:normal}
|
||||
ol.arabic{list-style-type:decimal}
|
||||
ol.decimal{list-style-type:decimal-leading-zero}
|
||||
ol.loweralpha{list-style-type:lower-alpha}
|
||||
ol.upperalpha{list-style-type:upper-alpha}
|
||||
ol.lowerroman{list-style-type:lower-roman}
|
||||
ol.upperroman{list-style-type:upper-roman}
|
||||
ol.lowergreek{list-style-type:lower-greek}
|
||||
.hdlist>table,.colist>table{border:0;background:none}
|
||||
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
|
||||
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
|
||||
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
|
||||
td.hdlist2{word-wrap:anywhere}
|
||||
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
|
||||
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
|
||||
.colist td:not([class]):first-child img{max-width:none}
|
||||
.colist td:not([class]):last-child{padding:.25em 0}
|
||||
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
|
||||
.imageblock.left{margin:.25em .625em 1.25em 0}
|
||||
.imageblock.right{margin:.25em 0 1.25em .625em}
|
||||
.imageblock>.title{margin-bottom:0}
|
||||
.imageblock.thumb,.imageblock.th{border-width:6px}
|
||||
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
|
||||
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
|
||||
.image.left{margin-right:.625em}
|
||||
.image.right{margin-left:.625em}
|
||||
a.image{text-decoration:none;display:inline-block}
|
||||
a.image object{pointer-events:none}
|
||||
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
|
||||
sup.footnote a,sup.footnoteref a{text-decoration:none}
|
||||
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
|
||||
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
|
||||
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
|
||||
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
|
||||
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
|
||||
#footnotes .footnote:last-of-type{margin-bottom:0}
|
||||
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
|
||||
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
|
||||
.gist .file-data>table td.line-data{width:99%}
|
||||
div.unbreakable{page-break-inside:avoid}
|
||||
.big{font-size:larger}
|
||||
.small{font-size:smaller}
|
||||
.underline{text-decoration:underline}
|
||||
.overline{text-decoration:overline}
|
||||
.line-through{text-decoration:line-through}
|
||||
.aqua{color:#00bfbf}
|
||||
.aqua-background{background:#00fafa}
|
||||
.black{color:#000}
|
||||
.black-background{background:#000}
|
||||
.blue{color:#0000bf}
|
||||
.blue-background{background:#0000fa}
|
||||
.fuchsia{color:#bf00bf}
|
||||
.fuchsia-background{background:#fa00fa}
|
||||
.gray{color:#606060}
|
||||
.gray-background{background:#7d7d7d}
|
||||
.green{color:#006000}
|
||||
.green-background{background:#007d00}
|
||||
.lime{color:#00bf00}
|
||||
.lime-background{background:#00fa00}
|
||||
.maroon{color:#600000}
|
||||
.maroon-background{background:#7d0000}
|
||||
.navy{color:#000060}
|
||||
.navy-background{background:#00007d}
|
||||
.olive{color:#606000}
|
||||
.olive-background{background:#7d7d00}
|
||||
.purple{color:#600060}
|
||||
.purple-background{background:#7d007d}
|
||||
.red{color:#bf0000}
|
||||
.red-background{background:#fa0000}
|
||||
.silver{color:#909090}
|
||||
.silver-background{background:#bcbcbc}
|
||||
.teal{color:#006060}
|
||||
.teal-background{background:#007d7d}
|
||||
.white{color:#bfbfbf}
|
||||
.white-background{background:#fafafa}
|
||||
.yellow{color:#bfbf00}
|
||||
.yellow-background{background:#fafa00}
|
||||
span.icon>.fa{cursor:default}
|
||||
a span.icon>.fa{cursor:inherit}
|
||||
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
|
||||
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
|
||||
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
|
||||
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
|
||||
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
|
||||
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
|
||||
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
|
||||
.conum[data-value] *{color:#fff!important}
|
||||
.conum[data-value]+b{display:none}
|
||||
.conum[data-value]::after{content:attr(data-value)}
|
||||
pre .conum[data-value]{position:relative;top:-.125em}
|
||||
b.conum *{color:inherit!important}
|
||||
.conum:not([data-value]):empty{display:none}
|
||||
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
|
||||
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
|
||||
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
|
||||
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
|
||||
p{margin-bottom:1.25rem}
|
||||
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
|
||||
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
|
||||
.print-only{display:none!important}
|
||||
@page{margin:1.25cm .75cm}
|
||||
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
|
||||
html{font-size:80%}
|
||||
a{color:inherit!important;text-decoration:underline!important}
|
||||
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
|
||||
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
|
||||
abbr[title]::after{content:" (" attr(title) ")"}
|
||||
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
|
||||
thead{display:table-header-group}
|
||||
svg{max-width:100%}
|
||||
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
|
||||
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
|
||||
#header,#content,#footnotes,#footer{max-width:none}
|
||||
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
|
||||
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
|
||||
body.book #header{text-align:center}
|
||||
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
|
||||
body.book #header .details{border:0!important;display:block;padding:0!important}
|
||||
body.book #header .details span:first-child{margin-left:0!important}
|
||||
body.book #header .details br{display:block}
|
||||
body.book #header .details br+span::before{content:none!important}
|
||||
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
|
||||
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
|
||||
.listingblock code[data-lang]::before{display:block}
|
||||
#footer{padding:0 .9375em}
|
||||
.hide-on-print{display:none!important}
|
||||
.print-only{display:block!important}
|
||||
.hide-for-print{display:none!important}
|
||||
.show-for-print{display:inherit!important}}
|
||||
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
|
||||
.sect1{padding:0!important}
|
||||
.sect1+.sect1{border:0}
|
||||
#footer{background:none}
|
||||
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
|
||||
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
|
||||
</style>
|
||||
</head>
|
||||
<body class="article">
|
||||
<div id="header">
|
||||
</div>
|
||||
<div id="content">
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all method names match a provided regular expression.</p>
|
||||
</div>
|
||||
@ -482,11 +38,3 @@ public int Do_Something(){...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Last updated 2021-01-28 17:34:39 +0100
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
26
rspec-tools/tests/resources/rules/S100/javascript/rule.html
Normal file
26
rspec-tools/tests/resources/rules/S100/javascript/rule.html
Normal file
@ -0,0 +1,26 @@
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With the default regular expression <code>^[a-z][a-zA-Z0-9]*$</code>:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>function DoSomething(){...} // Noncompliant</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_compliant_solution">Compliant Solution</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>function doSomething(){...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
3
rspec-tools/tests/resources/rules/S100/kotlin/rule.html
Normal file
3
rspec-tools/tests/resources/rules/S100/kotlin/rule.html
Normal file
@ -0,0 +1,3 @@
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
45
rspec-tools/tests/resources/rules/S100/php/rule.html
Normal file
45
rspec-tools/tests/resources/rules/S100/php/rule.html
Normal file
@ -0,0 +1,45 @@
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With default provided regular expression: <code>^[a-z][a-zA-Z0-9]*$</code>:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>function DoSomething(){...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_compliant_solution">Compliant Solution</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>function doSomething(){...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_exceptions">Exceptions</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>Methods with an <code>@inheritdoc</code> annotation, as well as magic methods (<code>__construct()</code>, <code>__destruct()</code>, <code>__call()</code>, <code>__callStatic()</code>, <code>__get()</code>, <code>__set()</code>, <code>__isset()</code>, <code>__unset()</code>, <code>__sleep()</code>, <code>__wakeup()</code>, <code>__toString()</code>, <code>__invoke()</code>, <code>__set_state()</code>, <code>__clone()</code>, <code>__debugInfo()</code>) are ignored.</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>function __construct(){...}
|
||||
function __destruct(){...}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
function myFunc(){...}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
30
rspec-tools/tests/resources/rules/S100/python/rule.html
Normal file
30
rspec-tools/tests/resources/rules/S100/python/rule.html
Normal file
@ -0,0 +1,30 @@
|
||||
<div class="paragraph">
|
||||
<p>Sharing some naming conventions is a key point to make it possible for a team to efficiently collaborate. This rule allows to check that all method names match a provided regular expression.</p>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With default provided regular expression: <code>^[a-z_][a-z0-9_]*$</code></p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>class MyClass:
|
||||
def MyMethod(a,b):
|
||||
...</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_compliant_solution">Compliant Solution</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>class MyClass:
|
||||
def my_method(a,b):
|
||||
...</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
46
rspec-tools/tests/resources/rules/S100/rpg/rule.html
Normal file
46
rspec-tools/tests/resources/rules/S100/rpg/rule.html
Normal file
@ -0,0 +1,46 @@
|
||||
<div class="paragraph">
|
||||
<p>Sharing some naming conventions is a key point to make it possible for a team to efficiently collaborate. This rule allows to check that all subroutine names match a provided regular expression.</p>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With default provided regular expression <code>^SR[a-zA-Z0-9]*$</code>:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>C XXXXX BEGSR
|
||||
...
|
||||
C ENDSR</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre> /free
|
||||
begsr yyyy;
|
||||
endsr;
|
||||
/end-free{code}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_compliant_solution">Compliant Solution</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>C SR102 BEGSR
|
||||
...
|
||||
C ENDSR</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre> /free
|
||||
begsr SR103;
|
||||
endsr;
|
||||
/end-free</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
3
rspec-tools/tests/resources/rules/S100/ruby/rule.html
Normal file
3
rspec-tools/tests/resources/rules/S100/ruby/rule.html
Normal file
@ -0,0 +1,3 @@
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
30
rspec-tools/tests/resources/rules/S100/scala/rule.html
Normal file
30
rspec-tools/tests/resources/rules/S100/scala/rule.html
Normal file
@ -0,0 +1,30 @@
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_noncompliant_code_example">Noncompliant Code Example</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="paragraph">
|
||||
<p>With default provided regular expression:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>def DoSomething( ) : Unit = { // Noncompliant
|
||||
// ...
|
||||
}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<h2 id="_compliant_solution">Compliant Solution</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>def doSomething( ) : Unit = {
|
||||
// ...
|
||||
}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
3
rspec-tools/tests/resources/rules/S100/swift/rule.html
Normal file
3
rspec-tools/tests/resources/rules/S100/swift/rule.html
Normal file
@ -0,0 +1,3 @@
|
||||
<div class="paragraph">
|
||||
<p>Shared naming conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.</p>
|
||||
</div>
|
@ -6,9 +6,10 @@ from click.testing import CliRunner
|
||||
from rspec_tools.cli import cli
|
||||
from rspec_tools.rules import RulesRepository
|
||||
|
||||
import os
|
||||
|
||||
class TestCLIValidateRulesMetadata:
|
||||
'''Unit test for the Command Line Interface.'''
|
||||
'''Unit tests for metadata validation through Command Line Interface.'''
|
||||
|
||||
def _run(self, rules: List[str]):
|
||||
runner = CliRunner()
|
||||
@ -54,3 +55,29 @@ class TestCLIValidateRulesMetadata:
|
||||
assert 'Rule scala:S502 has invalid metadata : \'remediation\' is a required property' in result.output
|
||||
assert 'Validation failed due to 2 errors out of 2 analyzed rules' in result.output
|
||||
assert result.exit_code == 1
|
||||
|
||||
|
||||
class TestCLIValidateDescription:
|
||||
'''Unit tests for description validation through Command Line Interface.'''
|
||||
|
||||
def _run(self, rules: List[str]):
|
||||
runner = CliRunner()
|
||||
mock_path = os.path.realpath(Path(__file__).parent.joinpath('resources', 'rules'))
|
||||
arguments = ['check-description', '--d', mock_path] + rules
|
||||
return runner.invoke(cli, arguments)
|
||||
|
||||
def _run_invalid(self, rules: List[str]):
|
||||
runner = CliRunner()
|
||||
mock_path = os.path.realpath(Path(__file__).parent.joinpath('resources', 'invalid-rules'))
|
||||
arguments = ['check-description', '--d', mock_path] + rules
|
||||
return runner.invoke(cli, arguments)
|
||||
|
||||
def test_valid_rule(self):
|
||||
result = self._run(['S100'])
|
||||
assert result.output == ''
|
||||
assert result.exit_code == 0
|
||||
|
||||
def test_invalid_rule(self):
|
||||
result = self._run_invalid(['S100'])
|
||||
assert 'Validation failed due to 7 errors' in result.output
|
||||
assert result.exit_code == 1
|
||||
|
@ -2,43 +2,63 @@ from pathlib import Path
|
||||
|
||||
from unittest.mock import patch, PropertyMock
|
||||
import pytest
|
||||
import re
|
||||
from rspec_tools.errors import RuleValidationError
|
||||
from copy import deepcopy
|
||||
|
||||
from rspec_tools.rules import LanguageSpecificRule, RulesRepository
|
||||
from rspec_tools.validation.description import validate_section_names, validate_section_levels
|
||||
from rspec_tools.validation.description import validate_section_names, validate_section_levels, validate_parameters
|
||||
|
||||
@pytest.fixture
|
||||
def rule_language(mockrules: Path):
|
||||
rule = RulesRepository(rules_path=mockrules).get_rule('S100')
|
||||
return rule.get_language('cfamily')
|
||||
def _rule_language(rule_id, language):
|
||||
rule = RulesRepository(rules_path=mockrules).get_rule(rule_id)
|
||||
return rule.get_language(language)
|
||||
return _rule_language
|
||||
|
||||
def test_valid_sections_passes_validation(rule_language: LanguageSpecificRule):
|
||||
@pytest.fixture
|
||||
def invalid_rule(mockinvalidrules: Path):
|
||||
def _invalid_rule(rule_id, language):
|
||||
rule = RulesRepository(rules_path=mockinvalidrules).get_rule(rule_id)
|
||||
return rule.get_language(language)
|
||||
return _invalid_rule
|
||||
|
||||
def test_valid_sections_passes_validation(rule_language):
|
||||
'''Check that description with standard sections is considered valid.'''
|
||||
validate_section_names(rule_language)
|
||||
validate_section_names(rule_language('S100', 'cfamily'))
|
||||
|
||||
def test_unexpected_section_fails_validation(rule_language: LanguageSpecificRule):
|
||||
'''Check that unconventional section header breaks validation.'''
|
||||
invalid_description = deepcopy(rule_language.description)
|
||||
invalid_header = invalid_description.new_tag('h2')
|
||||
invalid_header.string = 'Invalid header'
|
||||
invalid_description.body.insert(1, invalid_header)
|
||||
with pytest.raises(RuleValidationError, match=fr'^Rule {rule_language.id} has unconventional header "Invalid header"'):
|
||||
with patch.object(LanguageSpecificRule, 'description', new_callable=PropertyMock) as mock:
|
||||
mock.return_value = invalid_description
|
||||
validate_section_names(rule_language)
|
||||
def test_unexpected_section_fails_validation(invalid_rule):
|
||||
rule = invalid_rule('S100', 'cfamily')
|
||||
with pytest.raises(RuleValidationError, match=fr'^Rule {rule.id} has unconventional header "Invalid header"'):
|
||||
validate_section_names(rule)
|
||||
|
||||
def test_valid_section_levels_passes_validation(rule_language: LanguageSpecificRule):
|
||||
'''Check that description with standard sections levels is considered valid.'''
|
||||
validate_section_levels(rule_language)
|
||||
def test_valid_section_levels_passes_validation(rule_language):
|
||||
'''Check that description with correct formatting is considered valid.'''
|
||||
validate_section_levels(rule_language('S100', 'cfamily'))
|
||||
|
||||
def test_level_0_section_fails_validation(rule_language: LanguageSpecificRule):
|
||||
'''Check that level-0 section header breaks validation.'''
|
||||
invalid_description = deepcopy(rule_language.description)
|
||||
invalid_header = invalid_description.new_tag('h1')
|
||||
invalid_header.string = 'Invalid header level'
|
||||
invalid_description.body.insert(1, invalid_header)
|
||||
with pytest.raises(RuleValidationError, match=fr'^Rule {rule_language.id} has level-0 header "Invalid header level"'):
|
||||
with patch.object(LanguageSpecificRule, 'description', new_callable=PropertyMock) as mock:
|
||||
mock.return_value = invalid_description
|
||||
validate_section_levels(rule_language)
|
||||
def test_level_0_section_fails_validation(invalid_rule):
|
||||
rule = invalid_rule('S100', 'cfamily')
|
||||
with pytest.raises(RuleValidationError, match=fr'^Rule {rule.id} has level-0 header "Invalid header level"'):
|
||||
validate_section_levels(rule)
|
||||
|
||||
def test_parameters_passes_validation(rule_language):
|
||||
'''Check that correctly formed parameters are considered valid.'''
|
||||
validate_parameters(rule_language('S100', 'cfamily'))
|
||||
|
||||
def test_parameters_fails_validation_missing_block(invalid_rule):
|
||||
'''Check that description with unexpected tag breaks validation.'''
|
||||
rule = invalid_rule('S100', 'cfamily')
|
||||
with pytest.raises(RuleValidationError, match=fr'^Rule {rule.id} should use `\*\*\*\*` blocks for each parameter'):
|
||||
validate_parameters(rule)
|
||||
|
||||
def test_parameters_fails_validation_missing_title(invalid_rule):
|
||||
rule = invalid_rule('S100', 'csharp')
|
||||
'''Check that parameters without key as title breaks validation.'''
|
||||
with pytest.raises(RuleValidationError, match=fr'^Rule {rule.id} should have a parameter name declared with `.name` before the bock, for each parameter'):
|
||||
validate_parameters(rule)
|
||||
|
||||
def test_parameters_fails_validation_missing_description(invalid_rule):
|
||||
rule = invalid_rule('S100', 'java')
|
||||
'''Check that parameters without any description break validation.'''
|
||||
with pytest.raises(RuleValidationError, match=fr'^Rule {rule.id} should have a description for each parameter'):
|
||||
validate_parameters(rule)
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description: Regular expression used to check the [method|function|subroutine] names against
|
||||
* Default: ^([A-Z0-9_]*|[a-z0-9_]*)$
|
||||
* Type: STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^([A-Z0-9_]*|[a-z0-9_]*)$
|
||||
----
|
||||
|
||||
Regular expression used to check the [method|function|subroutine] names against
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* description = Regular expression used to check the function names against
|
||||
* default = ^[a-z][a-zA-Z0-9]*$
|
||||
* type = STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^[a-z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the function names against
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description: Regular expression used to check the [method|function|subroutine] names against
|
||||
* Default value: ^[a-z][a-zA-Z0-9]*$
|
||||
* Type: STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^[a-z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the [method|function|subroutine] names against
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description: Regular expression used to check the function names against
|
||||
* Default value: ^[a-zA-Z0-9]+$
|
||||
* Type: STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^[a-zA-Z0-9]+$
|
||||
----
|
||||
|
||||
Regular expression used to check the function names against
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description: Regular expression used to check the method names against
|
||||
* Default value: ^[a-z][a-zA-Z0-9]*$
|
||||
* Type: STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^[a-z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the method names against
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description: Regular expression used to check the [method|function|subroutine] names against
|
||||
* Default value: ^[_a-z][a-zA-Z0-9]*$
|
||||
* Type: STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^[_a-z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the [method|function|subroutine] names against
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description: Regular expression used to check the [method|function|subroutine] names against
|
||||
* Default: ^[a-z][a-zA-Z0-9]*$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^[a-z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the [method|function|subroutine] names against
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* description = Regular expression used to check the [method|function|subroutine] names against
|
||||
* default = ^[a-z_][a-z0-9_]*$
|
||||
* type = STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^[a-z_][a-z0-9_]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the [method|function|subroutine] names against
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description: Regular expression used to check the subroutine names against
|
||||
* Default: ^SR[a-zA-Z0-9]*$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^SR[a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the subroutine names against
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description: Regular expression used to check the function
|
||||
* Default: [a-z_][a-z0-9_]\{2,}$
|
||||
* Type: STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
[a-z_][a-z0-9_]\{2,}$
|
||||
----
|
||||
|
||||
Regular expression used to check the function
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description: Regular expression used to check the function names against
|
||||
* Default value: ^[a-z][a-zA-Z0-9]*$
|
||||
* Type: STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^[a-z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the function names against
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description : Regular expression used to check the class names against.
|
||||
* Default: ^([A-Z0-9_]*|[a-z0-9_]*)$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^([A-Z0-9_]*|[a-z0-9_]*)$
|
||||
----
|
||||
|
||||
Regular expression used to check the class names against.
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* description = Regular expression used to check the class names against.
|
||||
* default = ^[A-Z][a-zA-Z0-9]*$
|
||||
* type = STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^[A-Z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the class names against.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description : Regular expression used to check the class names against.
|
||||
* Default value : ^[A-Z][a-zA-Z0-9]*$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^[A-Z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the class names against.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description : Regular expression used to check the class names against.
|
||||
* Default value : ^[A-Z][a-zA-Z0-9]*$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^[A-Z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the class names against.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description : Regular expression used to check the class names against.
|
||||
* Default value : ^[A-Z][a-zA-Z0-9]*$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^[A-Z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the class names against.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description : Regular expression used to check the class names against.
|
||||
* Default value : ^[A-Z][a-zA-Z0-9]*$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^[A-Z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the class names against.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description : Regular expression used to check the class names against.
|
||||
* Default value : ^[A-Z][a-zA-Z0-9]*$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^[A-Z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the class names against.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* description = Regular expression used to check the class names against.
|
||||
* default = ^_?([A-Z_][a-zA-Z0-9]{empty}*|[a-z_][a-z0-9_]{empty}*)$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^_?([A-Z_][a-zA-Z0-9]{empty}*|[a-z_][a-z0-9_]{empty}*)$
|
||||
----
|
||||
|
||||
Regular expression used to check the class names against.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* Description : Regular expression used to check the class names against.
|
||||
* Default value : ^[A-Z][a-zA-Z0-9]*$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^[A-Z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the class names against.
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* description = Regular expression used to check the class names against.
|
||||
* default = ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$
|
||||
* type = STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$
|
||||
----
|
||||
|
||||
Regular expression used to check the class names against.
|
||||
****
|
||||
|
@ -1,8 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = maximumLineLength
|
||||
Description: The maximum authorized line length
|
||||
|
||||
Default Value: 80
|
||||
.maximumLineLength
|
||||
****
|
||||
|
||||
----
|
||||
80
|
||||
----
|
||||
|
||||
The maximum authorized line length
|
||||
****
|
||||
|
@ -1,8 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = maximumLineLength
|
||||
Description: The maximum authorized line length.
|
||||
|
||||
Default Value: 200
|
||||
.maximumLineLength
|
||||
****
|
||||
|
||||
----
|
||||
200
|
||||
----
|
||||
|
||||
The maximum authorized line length.
|
||||
****
|
||||
|
@ -1,8 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = maximumLineLength
|
||||
Description: The maximum authorized line length.
|
||||
|
||||
Default Value: 80
|
||||
.maximumLineLength
|
||||
****
|
||||
|
||||
----
|
||||
80
|
||||
----
|
||||
|
||||
The maximum authorized line length.
|
||||
****
|
||||
|
@ -1,8 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = maximumLineLength
|
||||
Description: The maximum authorized line length.
|
||||
|
||||
Default Value: 200
|
||||
.maximumLineLength
|
||||
****
|
||||
|
||||
----
|
||||
200
|
||||
----
|
||||
|
||||
The maximum authorized line length.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = maxLength
|
||||
* description = The maximum authorized line length.
|
||||
* default = 120
|
||||
.maxLength
|
||||
****
|
||||
|
||||
----
|
||||
120
|
||||
----
|
||||
|
||||
The maximum authorized line length.
|
||||
****
|
||||
|
11
rules/S103/javascript/parameters.adoc
Normal file
11
rules/S103/javascript/parameters.adoc
Normal file
@ -0,0 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
.maximumLineLength
|
||||
****
|
||||
|
||||
----
|
||||
180
|
||||
----
|
||||
|
||||
The maximum authorized line length.
|
||||
****
|
@ -8,7 +8,7 @@ ifdef::env-github,rspecator-view[]
|
||||
|
||||
include::../message.adoc[]
|
||||
|
||||
include::../parameters.adoc[]
|
||||
include::parameters.adoc[]
|
||||
|
||||
'''
|
||||
== Comments And Links
|
||||
|
@ -1,12 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = maximumLineLength
|
||||
Description: The maximum authorized line length.
|
||||
|
||||
Default Value: 120
|
||||
|
||||
Default Value for JavaScript: 180
|
||||
|
||||
Default Value for T-SQL: 200
|
||||
.maximumLineLength
|
||||
****
|
||||
|
||||
----
|
||||
120
|
||||
----
|
||||
|
||||
The maximum authorized line length.
|
||||
****
|
||||
|
11
rules/S103/tsql/parameters.adoc
Normal file
11
rules/S103/tsql/parameters.adoc
Normal file
@ -0,0 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
.maximumLineLength
|
||||
****
|
||||
|
||||
----
|
||||
200
|
||||
----
|
||||
|
||||
The maximum authorized line length.
|
||||
****
|
@ -8,7 +8,7 @@ ifdef::env-github,rspecator-view[]
|
||||
|
||||
include::../message.adoc[]
|
||||
|
||||
include::../parameters.adoc[]
|
||||
include::parameters.adoc[]
|
||||
|
||||
'''
|
||||
== Comments And Links
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = maximumLineLength
|
||||
* description = The maximum authorized line length.
|
||||
* default = 200
|
||||
* type = INTEGER
|
||||
.maximumLineLength
|
||||
****
|
||||
_INTEGER_
|
||||
|
||||
----
|
||||
200
|
||||
----
|
||||
|
||||
The maximum authorized line length.
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = maximumFileLocThreshold
|
||||
* description = The maximum authorized lines
|
||||
* default = 1000
|
||||
* type = INTEGER
|
||||
.maximumFileLocThreshold
|
||||
****
|
||||
_INTEGER_
|
||||
|
||||
----
|
||||
1000
|
||||
----
|
||||
|
||||
The maximum authorized lines
|
||||
****
|
||||
|
@ -1,8 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = Max
|
||||
Description: Maximum authorized lines of code in a file.
|
||||
|
||||
Default Value: 1000
|
||||
.Max
|
||||
****
|
||||
|
||||
----
|
||||
1000
|
||||
----
|
||||
|
||||
Maximum authorized lines of code in a file.
|
||||
****
|
||||
|
@ -1,8 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = maximumFileLocThreshold
|
||||
Description: Maximum authorized lines in a file.
|
||||
|
||||
Default Value: 1000
|
||||
.maximumFileLocThreshold
|
||||
****
|
||||
|
||||
----
|
||||
1000
|
||||
----
|
||||
|
||||
Maximum authorized lines in a file.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = excludeFunctions
|
||||
* description: 'true' if functions should handle all exceptions, 'flase if they can let some propagate
|
||||
* default: false
|
||||
.excludeFunctions
|
||||
****
|
||||
|
||||
----
|
||||
false
|
||||
----
|
||||
|
||||
'true' if functions should handle all exceptions, 'flase if they can let some propagate
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = markAll
|
||||
* description: Mark all tab errors
|
||||
* default: false
|
||||
.markAll
|
||||
****
|
||||
|
||||
----
|
||||
false
|
||||
----
|
||||
|
||||
Mark all tab errors
|
||||
****
|
||||
|
@ -1,8 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = packagesToDetect
|
||||
Default: DBMS_SYS_SQL,DBMS_BACKUP_RESTORE,DBMS_LOB,DBMS_NAMESPACE,DBMS_SCHEDULER,DBMS_RANDOM,EMD_SYSTEM,UTL_FILE,UTL_HTTP,UTL_SMTP,UTL_TCP
|
||||
|
||||
Description: List of packages that should be detected
|
||||
.packagesToDetect
|
||||
****
|
||||
|
||||
----
|
||||
DBMS_SYS_SQL,DBMS_BACKUP_RESTORE,DBMS_LOB,DBMS_NAMESPACE,DBMS_SCHEDULER,DBMS_RANDOM,EMD_SYSTEM,UTL_FILE,UTL_HTTP,UTL_SMTP,UTL_TCP
|
||||
----
|
||||
|
||||
List of packages that should be detected
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
* Description: Maximum number of allowed conditional operators in an expression
|
||||
* Default Value : 3
|
||||
.max
|
||||
****
|
||||
|
||||
----
|
||||
3
|
||||
----
|
||||
|
||||
Maximum number of allowed conditional operators in an expression
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
* Description: Maximum number of allowed conditional operators in an expression
|
||||
* Default Value : 3
|
||||
.max
|
||||
****
|
||||
|
||||
----
|
||||
3
|
||||
----
|
||||
|
||||
Maximum number of allowed conditional operators in an expression
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
* description = Maximum authorized number of parameters
|
||||
* default = 7
|
||||
* type = INTEGER
|
||||
.max
|
||||
****
|
||||
_INTEGER_
|
||||
|
||||
----
|
||||
7
|
||||
----
|
||||
|
||||
Maximum authorized number of parameters
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
* description = Maximum authorized number of parameters
|
||||
* default = 7
|
||||
.max
|
||||
****
|
||||
|
||||
----
|
||||
7
|
||||
----
|
||||
|
||||
Maximum authorized number of parameters
|
||||
****
|
||||
|
@ -1,10 +1,20 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
** Description: Maximum authorized number of parameters
|
||||
** Default Value: 7
|
||||
* key: constructorMax
|
||||
** Description: Maximum authorized number of parameters for a constructor
|
||||
** default: 7
|
||||
.max
|
||||
****
|
||||
|
||||
----
|
||||
7
|
||||
----
|
||||
|
||||
Maximum authorized number of parameters
|
||||
****
|
||||
.constructorMax
|
||||
****
|
||||
|
||||
----
|
||||
7
|
||||
----
|
||||
|
||||
Maximum authorized number of parameters for a constructor
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = maximumParameterCount
|
||||
* description = Maximum authorized number of parameters
|
||||
* default = 8
|
||||
.maximumParameterCount
|
||||
****
|
||||
|
||||
----
|
||||
8
|
||||
----
|
||||
|
||||
Maximum authorized number of parameters
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = parameters
|
||||
* description: The maximum number of function and procedure parameters allowed.
|
||||
* default: 10
|
||||
.parameters
|
||||
****
|
||||
|
||||
----
|
||||
10
|
||||
----
|
||||
|
||||
The maximum number of function and procedure parameters allowed.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
* description = Maximum authorized number of parameters
|
||||
* default = 13
|
||||
.max
|
||||
****
|
||||
|
||||
----
|
||||
13
|
||||
----
|
||||
|
||||
Maximum authorized number of parameters
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
* Description: Maximum authorized number of parameters
|
||||
* Default Value: 10
|
||||
.max
|
||||
****
|
||||
|
||||
----
|
||||
10
|
||||
----
|
||||
|
||||
Maximum authorized number of parameters
|
||||
****
|
||||
|
@ -1,8 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = exceptions
|
||||
description: Comma separated list of allowed exceptions
|
||||
|
||||
default: -1,0,1
|
||||
.exceptions
|
||||
****
|
||||
|
||||
----
|
||||
-1,0,1
|
||||
----
|
||||
|
||||
Comma separated list of allowed exceptions
|
||||
****
|
||||
|
@ -1,7 +1,10 @@
|
||||
=== Parameters
|
||||
|
||||
* key = exceptions
|
||||
* default = -1,0,1,2
|
||||
* type = STRING
|
||||
|
||||
.exceptions
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
-1,0,1,2
|
||||
----
|
||||
****
|
||||
|
@ -1,12 +1,22 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
* description = Maximum depth of the inheritance tree. (Number)
|
||||
* default = 5
|
||||
* type = Integer
|
||||
* key = filteredClasses
|
||||
* description = Comma-separated list of classes or records to be filtered out of the count of inheritance. Depth counting will stop when a filtered class or record is reached. For example: System.Windows.Controls.UserControl, System.Windows.*
|
||||
* default = ""
|
||||
* type = String
|
||||
.max
|
||||
****
|
||||
_Integer_
|
||||
|
||||
----
|
||||
5
|
||||
----
|
||||
|
||||
Maximum depth of the inheritance tree. (Number)
|
||||
****
|
||||
.filteredClasses
|
||||
****
|
||||
_String_
|
||||
|
||||
----
|
||||
""
|
||||
----
|
||||
|
||||
Comma-separated list of classes or records to be filtered out of the count of inheritance. Depth counting will stop when a filtered class or record is reached. For example: System.Windows.Controls.UserControl, System.Windows.*
|
||||
****
|
||||
|
@ -1,19 +1,22 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
Description: Maximum depth of the inheritance tree. (Number)
|
||||
.max
|
||||
****
|
||||
_Integer_
|
||||
|
||||
Default Value: 5
|
||||
----
|
||||
5
|
||||
----
|
||||
|
||||
Type: Integer
|
||||
|
||||
|
||||
Key: filteredClasses
|
||||
|
||||
Description: Classes to be filtered out of the count of inheritance. Depth counting will stop when a filtered class is reached. Ex value: java.fwk.AbstractFwkClass, java.fwkPackage.*
|
||||
|
||||
Default Value: ""
|
||||
|
||||
Type: String
|
||||
Maximum depth of the inheritance tree. (Number)
|
||||
****
|
||||
.filteredClasses
|
||||
****
|
||||
_String_
|
||||
|
||||
----
|
||||
""
|
||||
----
|
||||
|
||||
Classes to be filtered out of the count of inheritance. Depth counting will stop when a filtered class is reached. Ex value: java.fwk.AbstractFwkClass, java.fwkPackage.*
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = braceStyle
|
||||
* Description : enforced brace-style: 1tbs, stroustrup or allman.
|
||||
* Default value : 1tbs
|
||||
.braceStyle
|
||||
****
|
||||
|
||||
----
|
||||
1tbs
|
||||
----
|
||||
|
||||
enforced brace-style: 1tbs, stroustrup or allman.
|
||||
****
|
||||
|
12
rules/S114/abap/parameters.adoc
Normal file
12
rules/S114/abap/parameters.adoc
Normal file
@ -0,0 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
.format
|
||||
****
|
||||
_String_
|
||||
|
||||
----
|
||||
YIF_[A-Za-z]+
|
||||
----
|
||||
|
||||
Regular expression used to check the interface names against.
|
||||
****
|
@ -26,7 +26,7 @@ ifdef::env-github,rspecator-view[]
|
||||
|
||||
include::../message.adoc[]
|
||||
|
||||
include::../parameters.adoc[]
|
||||
include::parameters.adoc[]
|
||||
|
||||
'''
|
||||
== Comments And Links
|
||||
|
@ -1,12 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
Description: Regular expression used to check the interface names against.
|
||||
|
||||
Default: ^[A-Z][a-zA-Z0-9]*$
|
||||
|
||||
ABAP default: YIF_[A-Za-z]+
|
||||
|
||||
type: String
|
||||
.format
|
||||
****
|
||||
_String_
|
||||
|
||||
----
|
||||
^[A-Z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the interface names against.
|
||||
****
|
||||
|
@ -1,10 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
Description: Regular expression used to check the protocol names against.
|
||||
|
||||
Default: ^[A-Z][a-zA-Z0-9]*$
|
||||
|
||||
type: String
|
||||
.format
|
||||
****
|
||||
_String_
|
||||
|
||||
----
|
||||
^[A-Z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the protocol names against.
|
||||
****
|
||||
|
@ -1,8 +1,12 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
* description = Regular expression used to check the interface names against.
|
||||
* default = ^I([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$
|
||||
* type = STRING
|
||||
.format
|
||||
****
|
||||
_STRING_
|
||||
|
||||
----
|
||||
^I([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$
|
||||
----
|
||||
|
||||
Regular expression used to check the interface names against.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
* Description : Maximum allowed return statements per method
|
||||
* Default value: 3
|
||||
.max
|
||||
****
|
||||
|
||||
----
|
||||
3
|
||||
----
|
||||
|
||||
Maximum allowed return statements per method
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = max
|
||||
* Description : Maximum allowed return statements per function
|
||||
* Default value: 3
|
||||
.max
|
||||
****
|
||||
|
||||
----
|
||||
3
|
||||
----
|
||||
|
||||
Maximum allowed return statements per function
|
||||
****
|
||||
|
@ -1,10 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
Description: Regular expression used to check the constant names against.
|
||||
|
||||
Default Value: ^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$
|
||||
|
||||
Python default: (([A-Z_][A-Z0-9_]*)|(__.*__))$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$
|
||||
----
|
||||
|
||||
Regular expression used to check the constant names against.
|
||||
****
|
||||
|
@ -1,7 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = regexp
|
||||
* description: The regular expression the name should match.
|
||||
* default: [a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?
|
||||
.regexp
|
||||
****
|
||||
|
||||
----
|
||||
[a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?
|
||||
----
|
||||
|
||||
The regular expression the name should match.
|
||||
****
|
||||
|
11
rules/S115/python/parameters.adoc
Normal file
11
rules/S115/python/parameters.adoc
Normal file
@ -0,0 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
(([A-Z_][A-Z0-9_]*)|(__.*__))$
|
||||
----
|
||||
|
||||
Regular expression used to check the constant names against.
|
||||
****
|
@ -8,7 +8,7 @@ ifdef::env-github,rspecator-view[]
|
||||
|
||||
include::../message.adoc[]
|
||||
|
||||
include::../parameters.adoc[]
|
||||
include::parameters.adoc[]
|
||||
|
||||
'''
|
||||
== Comments And Links
|
||||
|
@ -1,8 +1,11 @@
|
||||
=== Parameters
|
||||
|
||||
* key = format
|
||||
Description: Regular expression used to check the constant names against.
|
||||
|
||||
Default Value: ^[a-z][a-zA-Z0-9]*$
|
||||
.format
|
||||
****
|
||||
|
||||
----
|
||||
^[a-z][a-zA-Z0-9]*$
|
||||
----
|
||||
|
||||
Regular expression used to check the constant names against.
|
||||
****
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user