[PYTHON] Script de vérification de code de caractère de code source

introduction

Il y a longtemps, il devenait nécessaire de vérifier le code de caractère du code source, donc je l'ai fait avec python et l'ai fait tourner régulièrement avec Jenkis, donc ce mémo

Pourquoi est-il nécessaire de vérifier le code de caractère du code source?

la mise en oeuvre

mojicodecheck.py


#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
	@brève vérification du code de caractère
	@author DM
	@date   2012/10/13
"""

import os, os.path, sys, re, time
import glob
import codecs
import chardet

#Dossiers à ignorer
ignorelist  = ["tgs","tools_src","shader","ext"]

#Extension de fichier à vérifier
extention  = [".c",".cpp",".h",".inc",".inl",".hpp"]

# 	main
def main():
	sys.stdout = codecs.getwriter("shift_jis")(sys.stdout) #production
	sys.stdin = codecs.getreader("shift_jis")(sys.stdin) #contribution

	#Affichage d'utilisation
	if len(sys.argv) < 2 or len(sys.argv) > 4:
		__usage()
		sys.exit(0)
		
	start_time = time.clock()

	#Répertoire de projets
	path = os.path.normpath(sys.argv[1])	#Obtenez le chemin du fichier du module
	print(path)
	
	
	ret = True

	
	for (root, dirs, files) in os.walk(path):
		for file in files:
			file_path = os.path.join(root, file)
			
			base, ext = os.path.splitext(file_path)
			
			ignore = False
			for d in ignorelist:
				if file_path.find(d) > 0:
					ignore = True
					break;
			
			if ignore == True:
				continue
			
			if ext in extention:
				try:
					f = open(file_path, 'r')
					data = f.read()
					p = chardet.detect(data)
					if p['encoding'] == 'SHIFT_JIS':
						print('error',p['encoding'],file_path)
						ret = False
				except IOError:
					print(file_path, 'cannot be opened.')
				finally:
					f.close()

	end_time = time.clock()
	print("complete![time: ",(end_time - start_time),"sec]")
	
	if ret == False:
		CODE='S001'
		MESSAGE='shift-jis still exists!!'
		EXPECTED='S999-error'
		ACTUAL='sample ' + CODE +' '+ MESSAGE
		sys.exit(EXPECTED+' '+ACTUAL)
	
# __main__
if __name__ == '__main__':
	#psyco.full()
	main()

python mojicodecheck.py ${BUILD_DIR}

Si vous exécutez

[MojiCodeCheck] $ /bin/sh -xe /tmp/hudson2121374754708119058.sh
+ python /var/lib/jenkins/workspace/soilproject/common/tools/mojicodecheck.py /var/lib/jenkins/workspace/soilproject
/var/lib/jenkins/workspace/soilproject
('error', 'SHIFT_JIS', '/var/lib/jenkins/workspace/soilproject/common/tgl/src/TGLSystemTypes.h')
('error', 'SHIFT_JIS', '/var/lib/jenkins/workspace/soilproject/common/tgl/src/Effect/TGLEffectEmit.h')
('error', 'SHIFT_JIS', '/var/lib/jenkins/workspace/soilproject/common/tgl/src/Effect/Program/EPrgZanplu.h')
('error', 'SHIFT_JIS', '/var/lib/jenkins/workspace/soilproject/common/tgl/src/Effect/Program/EPrgSpiral.cpp')
('complete![time: ', 15.200000000000001, 'sec]')
S999-error sample S001 shift-jis still exists!!
Build step 'Execute shell' marked build as failure
Notifying upstream projects of job completion
Finished: FAILURE

La source s-Jis est sortie dans le journal comme ceci.

C'est tout.

Recommended Posts

Script de vérification de code de caractère de code source
Code de caractère
code de caractère python
Installer ansible à partir du code source
Outil pour vérifier le style de code
2.x, 3.x code de caractères des séries python
Vérifiez le code avec flake8
Code de caractère appris en Python
Vérifiez toujours PEP8 lors de l'édition du code source Python dans Emacs
Code de personnage † Obscurité † Rapport de rencontre part1
Code: 2 "Hello World" dans "Choregraphe-Python script"
Vérifiez le style de code python à l'aide de pep8
Commandes Linux liées au code de caractère
[Python] Lire le code source de Flask
Formatage du code source Jinja2 avec atom-beautify
Compter les lignes de code source (SLOC)