Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

`M14-6-1`: enhancement to cover types

Ouverte
#221 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
35/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
cpp
Domaine
devtools

Piste de recherche

Commencez par l’issue 192 liée et le brouillon de requête M14-6-1, notamment NameInDependentBase, TypeUses et TemplatesPackage. Examinez le comportement de typedef et des utilisations de types présenté dans l’exemple C++, puis déterminez si la requête peut couvrir correctement les utilisations de typedef de classes de base dépendantes, qualifiées et non qualifiées, sans les problèmes de performance de l’ancienne bibliothèque.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Standard-AUTOSAR

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."
Langage dominant
CodeQL
Étoiles
227
Forks
82
Merge moyen
6 j 7 h
PR mergées (30 j)
9

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de github/codeql-coding-standards

Toutes les issues de github/codeql-coding-standards

Issues similaires

Plus d'issues DevTools

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.