[libgames-support] Add coding style checker
- From: Sahil Sareen <ssareen src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgames-support] Add coding style checker
- Date: Fri, 22 May 2015 08:42:20 +0000 (UTC)
commit a6c47620189f0057d7dfb1659274e7860268425e
Author: Michael Catanzaro <mcatanzaro gnome org>
Date: Thu May 21 20:20:45 2015 -0500
Add coding style checker
https://bugzilla.gnome.org/show_bug.cgi?id=749708
Signed-off-by: Sahil Sareen <sahil sareen hotmail com>
style-checker | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 158 insertions(+), 0 deletions(-)
---
diff --git a/style-checker b/style-checker
new file mode 100755
index 0000000..ea35259
--- /dev/null
+++ b/style-checker
@@ -0,0 +1,158 @@
+#!/usr/bin/env python3
+#
+# Script to check if any GNOME games Vala coding guidelines are violated.
+#
+# Copyright (C) 2015 Sahil Sareen (ssareen [ AT ] gnome [ DOT ] org)
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+import sys
+import re
+import os
+
+def find( s, ch ):
+ return [ i for i, ltr in enumerate( s ) if ltr == ch ]
+
+
+def main():
+ print("Validating the diff ...")
+
+ p = os.popen( 'git diff --unified=0', "r" )
+
+ # Read the diff
+ lines = []
+ lineNum = 0
+ fileName = ''
+ nIssues = 0
+
+ while True:
+ line = p.readline()
+
+ if not line: break
+ if line.startswith( '@@' ):
+ lineNumSearch = re.search( r'.* .* \+(\d+).*', line )
+ lineNum = int( lineNumSearch.groups()[ 0 ] )
+ elif line.startswith( '+' ):
+ if line.startswith( '+++' ):
+ pos = line.rfind( '/' )
+ fileName = line[ pos + 1 : -1 ]
+ elif fileName.endswith( 'vala' ):
+ lines += [ ( fileName, lineNum, line[ 1 : ] ) ]
+ lineNum += 1
+
+ def getLineFileName( line ):
+ return line[ 0 ]
+
+ def getLineNum( line ):
+ return line[ 1 ]
+
+ def getLineData( line, pos = -1 ):
+ if pos == -1:
+ return line[ 2 ]
+ else:
+ return line[ 2 ][ pos ]
+
+ def getLineWidth( line ):
+ return len( getLineData( line ) )
+
+ def printIssue( line, msg ):
+ print(getLineFileName( line ) + " => Line " + getLineNum( line ) + " " + msg)
+
+ for lineNum in range( 0, len( lines ) ):
+
+ currLine = lines[ lineNum ]
+
+ # Line Width
+ if getLineWidth( currLine ) > 120:
+ printIssue( currLine, "is greater than 120 charecters" )
+ nIssues += 1
+
+ # Lines with trailing white-space or tabspace
+ if getLineData( currLine ).endswith( ' \n' ):
+ printIssue( currLine, "has trailing whitespace" )
+ nIssues += 1
+
+ if getLineData( currLine ).endswith( '\t\n' ):
+ printIssue( currLine, "has trailing tabspace" )
+ nIssues += 1
+
+ # Lines with tabspace
+ if '\t' in getLineData( currLine ):
+ printIssue( currLine, "has tabspace" )
+ nIssues += 1
+
+ # Single whitespace before "{"
+ indexes = find( getLineData( currLine ), '{' )
+ for index in indexes:
+ if index > 1:
+ if getLineData( currLine, index - 1 ) not in [ ' ', '_' ]:
+ printIssue( currLine, "missing whitespace before {" )
+ nIssues += 1
+ elif getLineData( currLine, index - 2 ) == ' ' \
+ and getLineData( currLine, index - 1 ) != '_' \
+ and not ( re.findall( "\s*{", getLineData( currLine ) ) != [] \
+ and getLineData( currLine, 0 ) in [ '\t', ' ' ] ):
+ printIssue( currLine, "multiple whitespace before {" )
+ nIssues += 1
+
+ # Single whitespace before "("
+ indexes = find( getLineData( currLine ), '(' )
+ for index in indexes:
+ if index > 1:
+ if getLineData( currLine, index - 1 ) != ' ' \
+ and getLineData( currLine, index - 1 ) not in [ '_', '(', '&', '*', '-', '(',
'!','\t' ]:
+ printIssue( currLine, "missing whitespace before (" )
+ nIssues += 1
+ elif getLineData( currLine, index - 2 ) == ' ' \
+ and getLineData( currLine, index - 1 ) not in [ '_', '(' ] \
+ and not ( getLineData( currLine ).startswith( " *" ) \
+ or getLineData( currLine ).startswith("#") \
+ or ( re.findall( "\s*\(", getLineData( currLine ) != [] \
+ and getLineData( currLine, 0 ) in [ '\t', ' ' ] )
) ):
+ printIssue( currLine, "multiple whitespace before (" )
+ nIssues += 1
+
+ # No whitespce between round brackets "(xyz)"
+ indexes = find( getLineData( currLine ), '(' )
+ for index in indexes:
+ if index > 1:
+ if getLineData( currLine, index + 1 ) == ' ':
+ printIssue( currLine, "has whitespace after (" )
+ nIssues += 1
+
+ indexes = find( getLineData( currLine ), ')' )
+ for index in indexes:
+ if index > 1:
+ if getLineData( currLine, index - 1 ) == ' ':
+ printIssue( currLine, "has whitespace before )" )
+ nIssues += 1
+
+ if nIssues != 0:
+ if nIssues == 1:
+ print("Guideline checker found " + nIssues + " issue...")
+ else:
+ print("Guideline checker found " + nIssues + "issues...")
+
+ print("We strongly recommend you to fix these, to ignore use `git commit --no-verify`")
+ return -1
+
+ return 0
+
+if __name__ == "__main__":
+ sys.exit( main() )
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]