style.py (7807:15553b536bd6) | style.py (7827:49b7d40ee88a) |
---|---|
1#! /usr/bin/env python 2# Copyright (c) 2006 The Regents of The University of Michigan 3# Copyright (c) 2007 The Hewlett-Packard Development Company 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions are 8# met: redistributions of source code must retain the above copyright --- 22 unchanged lines hidden (view full) --- 31import re 32import os 33import sys 34 35sys.path.insert(0, os.path.dirname(__file__)) 36 37from file_types import lang_type 38 | 1#! /usr/bin/env python 2# Copyright (c) 2006 The Regents of The University of Michigan 3# Copyright (c) 2007 The Hewlett-Packard Development Company 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions are 8# met: redistributions of source code must retain the above copyright --- 22 unchanged lines hidden (view full) --- 31import re 32import os 33import sys 34 35sys.path.insert(0, os.path.dirname(__file__)) 36 37from file_types import lang_type 38 |
39tabsize = 8 |
|
39lead = re.compile(r'^([ \t]+)') 40trail = re.compile(r'([ \t]+)$') 41any_control = re.compile(r'\b(if|while|for)[ \t]*[(]') 42good_control = re.compile(r'\b(if|while|for) [(]') 43 44whitespace_types = set(('C', 'C++', 'swig', 'python', 'asm', 'isa', 'scons')) 45format_types = set(('C', 'C++')) 46 --- 17 unchanged lines hidden (view full) --- 64 except OSError, msg: 65 print 'could not open file %s: %s' % (filename, msg) 66 return 67 68 for num,line in enumerate(f): 69 if not checkwhite_line(line): 70 yield line,num + 1 71 | 40lead = re.compile(r'^([ \t]+)') 41trail = re.compile(r'([ \t]+)$') 42any_control = re.compile(r'\b(if|while|for)[ \t]*[(]') 43good_control = re.compile(r'\b(if|while|for) [(]') 44 45whitespace_types = set(('C', 'C++', 'swig', 'python', 'asm', 'isa', 'scons')) 46format_types = set(('C', 'C++')) 47 --- 17 unchanged lines hidden (view full) --- 65 except OSError, msg: 66 print 'could not open file %s: %s' % (filename, msg) 67 return 68 69 for num,line in enumerate(f): 70 if not checkwhite_line(line): 71 yield line,num + 1 72 |
72def fixwhite_line(line, tabsize): | 73def fixwhite_line(line): |
73 if lead.search(line): 74 newline = '' 75 for i,c in enumerate(line): 76 if c == ' ': 77 newline += ' ' 78 elif c == '\t': 79 newline += ' ' * (tabsize - len(newline) % tabsize) 80 else: 81 newline += line[i:] 82 break 83 84 line = newline 85 86 return line.rstrip() + '\n' 87 | 74 if lead.search(line): 75 newline = '' 76 for i,c in enumerate(line): 77 if c == ' ': 78 newline += ' ' 79 elif c == '\t': 80 newline += ' ' * (tabsize - len(newline) % tabsize) 81 else: 82 newline += line[i:] 83 break 84 85 line = newline 86 87 return line.rstrip() + '\n' 88 |
88def fixwhite(filename, tabsize, fixonly=None): | 89def fixwhite(filename, fixonly=None): |
89 if lang_type(filename) not in whitespace_types: 90 return 91 92 try: 93 f = file(filename, 'r+') 94 except OSError, msg: 95 print 'could not open file %s: %s' % (filename, msg) 96 return --- 122 unchanged lines hidden (view full) --- 219 if i < fbeg: 220 modified.add(i) 221 elif i + 1 >= fend: 222 break 223 elif i > max_lines: 224 break 225 return modified 226 | 90 if lang_type(filename) not in whitespace_types: 91 return 92 93 try: 94 f = file(filename, 'r+') 95 except OSError, msg: 96 print 'could not open file %s: %s' % (filename, msg) 97 return --- 122 unchanged lines hidden (view full) --- 220 if i < fbeg: 221 modified.add(i) 222 elif i + 1 >= fend: 223 break 224 elif i > max_lines: 225 break 226 return modified 227 |
227def do_check_whitespace(ui, repo, *files, **args): | 228def do_check_style(ui, repo, *files, **args): |
228 """check files for proper m5 style guidelines""" 229 from mercurial import mdiff, util 230 231 if files: 232 files = frozenset(files) 233 234 def skip(name): 235 return files and name in files 236 | 229 """check files for proper m5 style guidelines""" 230 from mercurial import mdiff, util 231 232 if files: 233 files = frozenset(files) 234 235 def skip(name): 236 return files and name in files 237 |
237 def prompt(name, fixonly=None): | 238 def prompt(name, func, fixonly=None): |
238 if args.get('auto', False): 239 result = 'f' 240 else: 241 while True: 242 result = ui.prompt("(a)bort, (i)gnore, or (f)ix?", default='a') 243 if result in 'aif': 244 break 245 246 if result == 'a': 247 return True 248 elif result == 'f': | 239 if args.get('auto', False): 240 result = 'f' 241 else: 242 while True: 243 result = ui.prompt("(a)bort, (i)gnore, or (f)ix?", default='a') 244 if result in 'aif': 245 break 246 247 if result == 'a': 248 return True 249 elif result == 'f': |
249 fixwhite(repo.wjoin(name), args['tabsize'], fixonly) | 250 func(repo.wjoin(name), fixonly) |
250 251 return False 252 253 modified, added, removed, deleted, unknown, ignore, clean = repo.status() 254 255 for fname in added: 256 if skip(fname): 257 continue 258 259 ok = True 260 for line,num in checkwhite(repo.wjoin(fname)): 261 ui.write("invalid whitespace in %s:%d\n" % (fname, num)) 262 if ui.verbose: 263 ui.write(">>%s<<\n" % line[-1]) 264 ok = False 265 266 if not ok: | 251 252 return False 253 254 modified, added, removed, deleted, unknown, ignore, clean = repo.status() 255 256 for fname in added: 257 if skip(fname): 258 continue 259 260 ok = True 261 for line,num in checkwhite(repo.wjoin(fname)): 262 ui.write("invalid whitespace in %s:%d\n" % (fname, num)) 263 if ui.verbose: 264 ui.write(">>%s<<\n" % line[-1]) 265 ok = False 266 267 if not ok: |
267 if prompt(fname): | 268 if prompt(fname, fixwhite): |
268 return True 269 270 try: 271 wctx = repo.workingctx() 272 except: 273 from mercurial import context 274 wctx = context.workingctx(repo) 275 --- 56 unchanged lines hidden (view full) --- 332 333 return False 334 335def check_hook(hooktype): 336 if hooktype not in ('pretxncommit', 'pre-qrefresh'): 337 raise AttributeError, \ 338 "This hook is not meant for %s" % hooktype 339 | 269 return True 270 271 try: 272 wctx = repo.workingctx() 273 except: 274 from mercurial import context 275 wctx = context.workingctx(repo) 276 --- 56 unchanged lines hidden (view full) --- 333 334 return False 335 336def check_hook(hooktype): 337 if hooktype not in ('pretxncommit', 'pre-qrefresh'): 338 raise AttributeError, \ 339 "This hook is not meant for %s" % hooktype 340 |
340def check_whitespace(ui, repo, hooktype, **kwargs): | 341def check_style(ui, repo, hooktype, **kwargs): |
341 check_hook(hooktype) | 342 check_hook(hooktype) |
342 args = { 'tabsize' : 8 } 343 return do_check_whitespace(ui, repo, **args) | 343 args = {} 344 return do_check_style(ui, repo, **args) |
344 345def check_format(ui, repo, hooktype, **kwargs): 346 check_hook(hooktype) 347 args = {} 348 return do_check_format(ui, repo, **args) 349 350try: 351 from mercurial.i18n import _ 352except ImportError: 353 def _(arg): 354 return arg 355 356cmdtable = { 357 '^m5style' : | 345 346def check_format(ui, repo, hooktype, **kwargs): 347 check_hook(hooktype) 348 args = {} 349 return do_check_format(ui, repo, **args) 350 351try: 352 from mercurial.i18n import _ 353except ImportError: 354 def _(arg): 355 return arg 356 357cmdtable = { 358 '^m5style' : |
358 ( do_check_whitespace, 359 [ ('a', 'auto', False, _("automatically fix whitespace")), 360 ('t', 'tabsize', 8, _("Number of spaces TAB indents")) ], 361 _('hg m5style [-a] [-t <tabsize>] [FILE]...')), | 359 ( do_check_style, 360 [ ('a', 'auto', False, _("automatically fix whitespace")) ], 361 _('hg m5style [-a] [FILE]...')), |
362 '^m5format' : 363 ( do_check_format, 364 [ ], 365 _('hg m5format [FILE]...')), 366} 367 368if __name__ == '__main__': 369 import getopt --- 18 unchanged lines hidden (view full) --- 388 usage = chkformat_usage 389 else: 390 sys.exit(fixwhite_usage + chkwhite_usage + chkformat_usage) 391 392 opts, args = getopt.getopt(sys.argv[2:], flags) 393 394 code = 1 395 verbose = 1 | 362 '^m5format' : 363 ( do_check_format, 364 [ ], 365 _('hg m5format [FILE]...')), 366} 367 368if __name__ == '__main__': 369 import getopt --- 18 unchanged lines hidden (view full) --- 388 usage = chkformat_usage 389 else: 390 sys.exit(fixwhite_usage + chkwhite_usage + chkformat_usage) 391 392 opts, args = getopt.getopt(sys.argv[2:], flags) 393 394 code = 1 395 verbose = 1 |
396 tabsize = 8 | |
397 for opt,arg in opts: 398 if opt == '-n': 399 code = None 400 if opt == '-t': 401 tabsize = int(arg) 402 if opt == '-v': 403 verbose += 1 404 --- 18 unchanged lines hidden --- | 396 for opt,arg in opts: 397 if opt == '-n': 398 code = None 399 if opt == '-t': 400 tabsize = int(arg) 401 if opt == '-v': 402 verbose += 1 403 --- 18 unchanged lines hidden --- |