Skip to content

Commit

Permalink
CPP-4815 Make rule applicable to CFamily and add taxonomy
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasz-kaminski-sonarsource authored Nov 23, 2023
1 parent bb2fb68 commit 098f48a
Show file tree
Hide file tree
Showing 10 changed files with 218 additions and 206 deletions.
File renamed without changes.
File renamed without changes.
2 changes: 2 additions & 0 deletions rules/S6620/cfamily/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}
2 changes: 2 additions & 0 deletions rules/S6620/cfamily/rule.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
include::../description.adoc[]

192 changes: 192 additions & 0 deletions rules/S6620/description.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
FIXME: add a description

// If you want to factorize the description uncomment the following line and create the file.
//include::../description.adoc[]

== Why is this an issue?

This rule is not really a rule, but a demonstration of the features from Asciidoc that can appear in a rule description.

=== All titles should be in sequence

No title 3 directly below title 1

==== Titles

There can be 4 different levels of titles, as demonstrated in this rule, usually with standard text.

==== Character format

It is not uncommon to have text in *bold*, _italic_, *_both_*. Less common are ^exponents^ and ~indices~.

We don't directly use highlighting, but use a specific form of it to [.underline]#underline# and [.line-through]#strikethrough#.

==== Source code

Code appears in two forms: `Embedded within a sentence`, in some cases as part of ``word``s, without spaces surrounding it.

[source,csharp]
----
private void OtherSourceCode()
{
// We usually indicate what language is used for the code
}
----

----
But not always
----

[source,cpp]
----
private void YetAnotherSourceCode()
{
// One rule may contain several languages
}
----

[source,javascript,diff-id=1,diff-type=noncompliant]
----
// And the code can contain information
----
[source,javascript,diff-id=1,diff-type=compliant]
----
// And the code can contain diff information
----

Diff-views are documented https://github.com/SonarSource/rspec/blob/master/docs/description.adoc#diff-view[here].

[source,txt,diff-id=2,diff-type=noncompliant]
----
When using diff-views, there should be one noncompliant example.
----

[source,txt,diff-id=2,diff-type=compliant]
----
When using diff-views, there should be at least one compliant solution.
However, the diff-view feature was first designed to have only one compliant solution.
----

[source,txt,diff-id=2,diff-type=compliant]
----
When using diff-views,
Be mindful that providing more than one compliant solution
is "supported" but may completely disable the diff highlighting.
----

This limitation is discussed https://discuss.sonarsource.com/t/support-for-multiple-compliant-code-snippets-in-the-rspec-code-diffs/14644[here].

----
// We have cases where we are missing the [source,language] attributes
// TODO: Maybe we should detect and prevent this
----

==== Lists

There can be bullet lists:

* With
* three
** An sublists
** Up to
*** Three nested levels
*** But no more
* bullets

Or numbered lists:

. A list
. with numbers
.. And also possible sublists
.. with more items


==== Admonitions

They are not supported.

*Warning*: They are simulated with manual layout.

==== Links

There are links in the text, see https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/#links for the various ways they can appear. Of course, the link can have https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/#links[another text].

We can also link to other rules, such as S100. We cannot specify which language is the target of this link, it is always the same as the current RSPEC language.

==== Tables

[frame=all]
[cols="^1,<1, 2a"]
|===
|Title|What we use | Details

| Tables | A simple table |
| Alignment | Can differ between cols |
| Header | The first line is often a header |
| Strong s| A cell can be put in bold |
| Tables | A table | Nested asciidoc, with, for instance:


* Nested
* lists

See for instance S5131
| Merged cells | They are not supported |
| Borders | Most often all around |
| Nested tables | They are not supported |
|===

==== Includes

It is possible to include other files.

include::included1.adoc[]

Sometimes, the content of the included files can vary, with the use of a variable.

:var: variable text

include::included2.adoc[]

Which file is included can also depend on a variable:

:inc: a.adoc

include::{inc}[]

:inc: b.adoc

include::{inc}[]


== How to fix it

=== Code examples

==== Noncompliant code example

[source,text,diff-id=3,diff-type=noncompliant]
----
FIXME
----

==== Compliant solution

[source,text,diff-id=3,diff-type=compliant]
----
FIXME
----

//=== How does this work?

//=== Pitfalls

//=== Going the extra mile


//== Resources
//=== Documentation
//=== Articles & blog posts
//=== Conference presentations
//=== Standards
//=== Benchmarks
File renamed without changes.
File renamed without changes.
15 changes: 0 additions & 15 deletions rules/S6620/java/metadata.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,2 @@
{
"title": "This is a rule showcasing which features avaibles in Asciidoc as available when writing a rule description",
"type": "CODE_SMELL",
"status": "ready",
"remediation": {
"func": "Constant\/Issue",
"constantCost": "5min"
},
"tags": [
],
"defaultSeverity": "Major",
"ruleSpecification": "RSPEC-6620",
"sqKey": "S6620",
"scope": "All",
"defaultQualityProfiles": ["Sonar way"],
"quickfix": "unknown"
}
Loading

0 comments on commit 098f48a

Please sign in to comment.