`M14-6-1`: enhancement to cover types
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza con el issue vinculado 192 y el borrador de consulta M14-6-1, incluidos NameInDependentBase, TypeUses y TemplatesPackage. Inspecciona el comportamiento de typedef y de los usos de tipos mostrado en el ejemplo de C++, y determina después si la consulta puede cubrir con precisión los usos de typedef de bases dependientes, tanto cualificados como no cualificados, y sin los problemas de rendimiento de la biblioteca antigua.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
as noted in this issue this rule does not address the types case
the reason was that at the time of writing this query it was discovered that we dont have fully qualified typenames for typedefs:
typedef int TYPE;
template<typename T>
class B {
public:
typedef T TYPE;
};
template<typename T>
class A : B<T> {
public:
void m2(){
TYPE t = 0; // NON_COMPLIANT
::TYPE t1 = 0; //COMPLIANT
typename B<T>::TYPE t2 = 0; // COMPLIANT
}
};
void f(){
A<int> a;
a.m2();
}
example, trying to get full names of types present:
from TypedefType t
select t, t.getQualifiedName(), t.getATypeNameUse()
result:
+| test.cpp:1:13:1:16 | TYPE | TYPE | test.cpp:20:14:20:14 | definition of t |
+| test.cpp:1:13:1:16 | TYPE | TYPE | test.cpp:26:16:26:17 | definition of t1 |
and initial audit level query was written but it was imprecise and used the old lib (so also non performat). would need cleanup or rewriting
/**
* @id cpp/autosar/name-not-referred-using-a-qualified-id-or-this-type-def-type
* @name M14-6-1: In a class template with a dependent base, any typedef type name that may be found in that dependent base shall shall be referred to using a qualified-id or this->
* @description Not using a qualified-id or `this->` syntax for typedef type uses in a class
* template makes the code more difficult to understand.
* @kind problem
* @precision very-high
* @problem.severity warning
* @tags external/autosar/id/m14-6-1
* maintainability
* readability
* external/autosar/allocated-target/implementation
* external/autosar/enforcement/automated
* external/autosar/obligation/required
*/
import cpp
import codingstandards.cpp.autosar
import codingstandards.cpp.TypeUses
import NameInDependentBase
/**
* `Locatable`s exists only in some `MemberFunction`
* this class is required to speed up `TypeUses.getATypeUse`
*/
class LocatablesInChild extends Locatable {
Class child;
LocatablesInChild() { this.getEnclosingElement() = child.getAMemberFunction() }
predicate isInThisChild(Class c) { c = child }
}
/**
* `TypedefType`s that are declared in a `Class`
* that is a parent of any other `Class`
*/
class ParentTypedefType extends TypedefType {
Class parent;
Class child;
ParentTypedefType() {
this.getDeclaringType() = parent and
getParent(child) = parent
}
predicate thisIsMyChild(Class c) { c = child }
}
/**
* All pairs of `TypedefType` and `ParentTypedefType`
* with a same name
*/
predicate sameNameTypeDefPairs(TypedefType v, ParentTypedefType parentType) {
v.getName() = parentType.getName()
}
from Class c, TypedefType v, ParentTypedefType parentType, LocatablesInChild l
where
not isExcluded(l, TemplatesPackage::nameNotReferredUsingAQualifiedIdOrThisTypeDefTypeQuery()) and
l.isInThisChild(c) and
parentType.thisIsMyChild(c) and
l = getATypeUse(v) and
//two TypedefTypes with same name but one was declared in the dependent base
sameNameTypeDefPairs(v, parentType)
select l,
"Use of typedef type name that also exists in a base class that may not be fully qualified."
- Lenguaje dominante
- CodeQL
- Estrellas
- 227
- Forks
- 82
- Merge medio
- 6 d 7 h
- PR fusionados (30 d)
- 9
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de github/codeql-coding-standards
-
false positive/false negative Stardard-MISRA-C++
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
github/codeql-coding-standards#1172 ·
-
Difficulty-Low false positive/false negative false-negative Impact-Low Standard-MISRA-C
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
Difficulty-Medium false positive/false negative false-positive Impact-Medium Standard-CERT-C
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
github/codeql-coding-standards#1200 ·
-
`RULE-0-0-1`: "unreachable statement" false positives due to over-pruning of the control-flow graph Abiertofalse positive/false negative
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
github/codeql-coding-standards#1190 ·
-
false positive/false negative
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
github/codeql-coding-standards#1175 ·
Todos los issues de github/codeql-coding-standards
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
palladius/rails8-app-on-gcp#145 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
elastic/gradle-plugins#156 ·
-
area:workflow bug ready-for-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
fil-donadoni/tolaria#4409 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
dotenvx/dotenv-vscode#139 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Fission-AI/OpenSpec#1960 ·