Question

J'ai une configuration de filtre de suppression de style de contrôle (par exemple, ignorer les nombres magiques dans le code de test unitaire).

Le fichier XML de suppression réside dans le même dossier que le fichier XML Checkstyle. Cependant, l'emplacement de ce fichier varie: sur ma fenêtre Windows dev il est dans d: \ dev \ shared \ checkstyle \ config sur le serveur Linux CI, ce sera dans / root / repo / shared / checkstyle / config sur une autre boîte de développeur, cela pourrait être n'importe où (ils consultent leur svn repo).

Le seul "& cohérent" " Le fait est que le fichier de suppression se trouve toujours dans le même dossier que le fichier xml checkstyle. Je ne peux pas trouver comment m'assurer que ce fichier est toujours enregistré de manière cohérente. De plus, je ne sais pas pourquoi checkstyle ne prend pas en charge la suppression intégrée dans le fichier XML checkstyle.

de l'aide?

Était-ce utile?

La solution

J'ai eu le même problème avec la configuration de la suppression de Checkstyle lors de mes allers-retours entre Linux et Windows. Voici comment je l'ai résolu dans mon système de génération basé sur Ant:

Fondamentalement, j'injecte la valeur de répertoire appropriée à la plate-forme dans le fichier de configuration principal de Checkstyle en configurant un fichier de propriétés Checkstyle avec un script de génération Ant.

Mon fichier de configuration principal Checkstyle a une déclaration de module SuppressionFilter comme indiqué ci-dessous. La valeur de la propriété checkstyle-suppressions-file provient d'un fichier de propriétés Checkstyle:

<module name="SuppressionFilter">
    <property name="file" value="${checkstyle-suppressions-file}"/>
</module>

Le fichier de propriétés Checkstyle n'est pas statique, il est généré par un script de génération Ant à partir d'un modèle de fichier de propriétés appelé template-checkstyle.properties . Voici à quoi ressemble le modèle pour la propriété du fichier de suppression:

checkstyle-suppressions-file=@SCM_DIR@/checkstyle_suppressions.xml

Mon script de génération Ant copie ce fichier dans un fichier nommé checkstyle.properties . Le jeton spécial de la copie est remplacé par la valeur appropriée du répertoire dans lequel se trouve le fichier de suppression:

<copy file="${scm.dir}/template-checkstyle.properties" tofile="${scm.dir}/checkstyle.properties">
    <filterset>
        <filter token="SCM_DIR" value="${scm.dir.unix}"/>
    </filterset>
</copy>

Maintenant, d'où vient la valeur de scm.dir.unix ? Eh bien, il est dérivé d'une propriété de ma construction, continuez à lire. Vous devrez spécifier une telle valeur avec les valeurs de répertoire que vous avez mentionnées.

Notez qu'il existe un problème peu évident concernant la manière dont vous spécifiez ce répertoire. Je dis que la valeur scm.dir.unix est dérivée d'une propriété de construction car j'ai constaté que le fichier de configuration principal Checkstyle ne peut pas contenir de barres obliques inverses, c'est-à-dire des caractères de séparation de chemin Windows, dans la valeur du propriété file du module SuppressionFilter . Par exemple, spécifier quelque chose comme C: \ foo \ bar \ baz conduit à un message d'erreur Checkstyle indiquant que C: foobarbaz est introuvable. Je travaille autour de cela en "convertissant". la propriété de construction du répertoire scm.dir en un fichier "unix" " formater avec la tâche pathconvert de Ant:

<pathconvert targetos="unix" property="scm.dir.unix">
    <path location="${scm.dir}"/>
</pathconvert>

Ensuite, j'appelle la tâche Ant checkstyle comme ceci:

<checkstyle config="${scm.dir}/checkstyle_checks.xml"
            properties="${scm.dir}/checkstyle.properties">
    <!-- details elided -->
</checkstyle>

L'appel à la tâche checkstyle injecte les paires clé / valeur contenues dans le fichier checkstyle.properties dans la configuration principale de Checkstyle.

Si vous le souhaitez, vous pouvez consulter l'intégralité des scripts ici .

J'espère que cela vous aidera

Autres conseils

Dans eclipse, j'ai mis ce qui suit, qui ne m'a pas obligé à ajouter de propriétés supplémentaires:

<module name="SuppressionFilter">
    <property name="file" value="${samedir}/suppressions.xml"/>
</module>

Je reçois le chemin absolu du répertoire où build.xml réside à l'aide de la variable ant.file et le nom du projet:

<project name="common" ... >
  <dirname property="thisdir" file="${ant.file.common}"/>

Ensuite, je peux concaténer un chemin absolu vers mes fichiers de configuration checkstyle:

checkstyle.suppressions.file=${thisdir}/qclib/checkstyle-suppressions.xml

Comme la variable thisdir provient de ant, elle ne semble pas nécessiter de conversion de séparateur de chemin.

Si vous utilisez eclipse et que le fichier de suppression se trouve dans le même répertoire que la configuration externe du style de contrôle, vous pouvez configurer un filtre de suppression semblable à celui-ci:

<module name="SuppressionFilter">
    <property name="file" value="${config_dir}/my_suppressions.xml"/>
</module>

Vous devez également définir la propriété $ {config_dir} dans la configuration du style de contrôle:

Préférences Eclipse - > " Checkstyle " - > Choisissez votre configuration cs - > "Propriétés .." - > "Propriétés supplémentaires .."

Définissez une propriété pour le répertoire de configuration checkstyle:

config_dir --->  ${config_loc}

Je pense que la réponse de Robert peut être étendue à une solution simple pour ant et Eclipse :

Incluez le fichier de suppression dans votre XML de configuration comme suit:

<module name="SuppressionFilter">
    <property name="file" value="${samedir}/suppressions.xml"/>
</module>

Eclipse est satisfait et trouve le fichier.

Pour que ant fonctionne, mettez à jour votre cible avec quelque chose comme ceci:

<checkstyle config="${checkstyle.config}/checkstyle-checks.xml">
    <!-- ... -->
    <property key="samedir" value="${checkstyle.config}"/>
</checkstyle>

J'espère que cela vous aidera.

Depuis CheckStyle 4.26.0, vous pouvez utiliser des constantes prédéfinies dans vos fichiers de configuration.

( https://github.com/jshiell/checkstyle-idea/issues/ 217 ):

  
      
  • $ {basedir} & amp; $ {project_loc} - est associé au répertoire du projet en cours
  •   
  • $ {workspace_loc} - est associé au répertoire actuel de l'espace de travail Eclipse
  •   
  • $ {config_loc} & amp; $ {samedir} - est assigné au répertoire dans lequel se trouve le fichier de configuration
  •   

Si vous souhaitez partager la configuration avec maven, vous devez activer "alias". les "constantes d'éclipse" dans votre configuration POM (dans la section de rapport) à l'aide de l'option "propertyExpansion". élément de configuration:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-checkstyle-plugin</artifactId>
   <version>3.0.0</version>
   <configuration>
      <configLocation>${project.basedir}/quality/checkstyle/dap_checkstyle_checks.xml</configLocation>
      <propertyExpansion>basedir=${project.basedir}</propertyExpansion>
   </configuration>
   <reportSets>
      <reportSet>
         <reports>
            <report>checkstyle</report>
         </reports>
      </reportSet>
   </reportSets>
</plugin>

Le " propertyExpansion " est inspiré de: https://github.com/checkstyle/checkstyle/ blob / master / pom.xml # L582 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top