def arg_parser(prog=None): from argparse import ArgumentParser, Action, ArgumentError class DictAction(Action): # pylint: disable=R0903 def __init__(self, option_strings, dest, nargs=None, **kwargs): super(DictAction, self).__init__(option_strings, dest, **kwargs) def __call__(self, parser, namespace, value, option_string=None): if not re.match(r"\s*\w+\s*=\s*\d+", value): raise ArgumentError(self, "should be like nloc=20") k, val = value.split("=", 2) getattr(namespace, self.dest)[k.strip()] = int(val.strip()) parser = ArgumentParser(prog=prog) parser.add_argument('paths', nargs='*', default=['.'], help='list of the filename/paths.') parser.add_argument('--version', action='version', version=VERSION) parser.add_argument("-l", "--languages", help='''List the programming languages you want to analyze. if left empty, it'll search for all languages it knows. `lizard -l cpp -l java`searches for C++ and Java code. The available languages are: ''' + ', '.join(x.language_names[0] for x in languages()), action="append", dest="languages", default=[]) parser.add_argument("-V", "--verbose", help="Output in verbose mode (long function name)", action="store_true", dest="verbose", default=False) parser.add_argument("-C", "--CCN", help='''Threshold for cyclomatic complexity number warning. The default value is %d. Functions with CCN bigger than it will generate warning ''' % DEFAULT_CCN_THRESHOLD, type=int, dest="CCN", default=DEFAULT_CCN_THRESHOLD) parser.add_argument("-L", "--length", help='''Threshold for maximum function length warning. The default value is %d. Functions length bigger than it will generate warning ''' % DEFAULT_MAX_FUNC_LENGTH, type=int, dest="length", default=DEFAULT_MAX_FUNC_LENGTH) parser.add_argument("-a", "--arguments", help="Limit for number of parameters", type=int, dest="arguments", default=100) parser.add_argument("-w", "--warnings_only", help='''Show warnings only, using clang/gcc's warning format for printing warnings. http://clang.llvm.org/docs/UsersManual.html#cmdoption-fdiagnostics-format ''', action="store_const", const=print_clang_style_warning, dest="printer") parser.add_argument("-i", "--ignore_warnings", help='''If the number of warnings is equal or less than the number, the tool will exit normally, otherwise it will generate error. Useful in makefile for legacy code.''', type=int, dest="number", default=0) parser.add_argument("-x", "--exclude", help='''Exclude files that match this pattern. * matches everything, ? matches any single character, "./folder/*" exclude everything in the folder recursively. Multiple patterns can be specified. Don't forget to add "" around the pattern.''', action="append", dest="exclude", default=[]) parser.add_argument("-t", "--working_threads", help='''number of working threads. The default value is 1. Using a bigger number can fully utilize the CPU and often faster.''', type=int, dest="working_threads", default=1) parser.add_argument("-X", "--xml", help='''Generate XML in cppncss style instead of the tabular output. Useful to generate report in Jenkins server''', action="store_const", const=print_xml, dest="printer") parser.add_argument("-H", "--html", help='''Output HTML report''', action="store_const", const=html_output, dest="printer") parser.add_argument("-m", "--modified", help="Calculate modified cyclomatic complexity number", action="append_const", const="modified", dest="extensions", default=[]) _extension_arg(parser) parser.add_argument("-s", "--sort", help='''Sort the warning with field. The field can be nloc, cyclomatic_complexity, token_count, p#arameter_count, etc. Or an customized field.''', action="append", dest="sorting", default=[]) parser.add_argument("-T", "--Threshold", help='''Set the limit for a field. The field can be nloc, cyclomatic_complexity, token_count, parameter_count, etc. Or an customized file. Lizard will report warning if a function exceed the limit''', action=DictAction, dest="thresholds", default={}) parser.add_argument("-W", "--whitelist", help='''The path and file name to the whitelist file. It's './whitelizard.txt' by default. Find more information in README.''', type=str, dest="whitelist", default=DEFAULT_WHITELIST) parser.usage = '''lizard [options] [PATH or FILE] [PATH] ...''' parser.description = __doc__ return parser
def arg_parser(prog=None): from argparse import ArgumentParser, Action, ArgumentError class DictAction(Action): # pylint: disable=R0903 def __init__(self, option_strings, dest, nargs=None, **kwargs): super(DictAction, self).__init__(option_strings, dest, **kwargs) def __call__(self, parser, namespace, value, option_string=None): if not re.match(r"\s*\w+\s*=\s*\d+", value): raise ArgumentError(self, "should be like nloc=20") k, val = value.split("=", 2) getattr(namespace, self.dest)[k.strip()] = int(val.strip()) parser = ArgumentParser(prog=prog) parser.add_argument('paths', nargs='*', default=['.'], help='list of the filename/paths.') parser.add_argument('--version', action='version', version=version) parser.add_argument("-l", "--languages", help='''List the programming languages you want to analyze. if left empty, it'll search for all languages it knows. `lizard -l cpp -l java`searches for C++ and Java code. The available languages are: ''' + ', '.join(x.language_names[0] for x in languages()), action="append", dest="languages", default=[]) parser.add_argument("-V", "--verbose", help="Output in verbose mode (long function name)", action="store_true", dest="verbose", default=False) parser.add_argument("-C", "--CCN", help='''Threshold for cyclomatic complexity number warning. The default value is %d. Functions with CCN bigger than it will generate warning ''' % DEFAULT_CCN_THRESHOLD, type=int, dest="CCN", default=DEFAULT_CCN_THRESHOLD) parser.add_argument("-f", "--input_file", help='''get a list of filenames from the given file ''', type=str, dest="input_file") parser.add_argument("-L", "--length", help='''Threshold for maximum function length warning. The default value is %d. Functions length bigger than it will generate warning ''' % DEFAULT_MAX_FUNC_LENGTH, type=int, dest="length", default=DEFAULT_MAX_FUNC_LENGTH) parser.add_argument("-a", "--arguments", help="Limit for number of parameters", type=int, dest="arguments", default=100) parser.add_argument("-w", "--warnings_only", help='''Show warnings only, using clang/gcc's warning format for printing warnings. http://clang.llvm.org/docs/UsersManual.html#cmdoption-fdiagnostics-format ''', action="store_const", const=print_clang_style_warning, dest="printer") parser.add_argument("--warning-msvs", help='''Show warnings only, using Visual Studio's warning format for printing warnings. https://msdn.microsoft.com/en-us/library/yxkt8b26.aspx ''', action="store_const", const=print_msvs_style_warning, dest="printer") parser.add_argument("-i", "--ignore_warnings", help='''If the number of warnings is equal or less than the number, the tool will exit normally; otherwise, it will generate error. If the number is negative, the tool exits normally regardless of the number of warnings. Useful in makefile for legacy code.''', type=int, dest="number", default=0) parser.add_argument("-x", "--exclude", help='''Exclude files that match the pattern. * matches everything, ? matches any single character, "./folder/*" exclude everything in the folder recursively. Multiple patterns can be specified. Don't forget to add "" around the pattern.''', action="append", dest="exclude", default=[]) parser.add_argument("-t", "--working_threads", help='''number of working threads. The default value is 1. Using a bigger number can fully utilize the CPU and often faster.''', type=int, dest="working_threads", default=1) parser.add_argument("-X", "--xml", help='''Generate XML in cppncss style instead of the tabular output. Useful to generate report in Jenkins server''', action="store_const", const=print_xml, dest="printer") parser.add_argument("--csv", help='''Generate CSV output as a transform of the default output''', action="store_const", const=print_csv, dest="printer") parser.add_argument("-H", "--html", help='''Output HTML report''', action="store_const", const=html_output, dest="printer") parser.add_argument("-m", "--modified", help='''Calculate modified cyclomatic complexity number , which count a switch/case with multiple cases as one CCN.''', action="append_const", const="modified", dest="extensions", default=[]) _extension_arg(parser) parser.add_argument("-s", "--sort", help='''Sort the warning with field. The field can be nloc, cyclomatic_complexity, token_count, p#arameter_count, etc. Or an customized field.''', action="append", dest="sorting", default=[]) parser.add_argument("-T", "--Threshold", help='''Set the limit for a field. The field can be nloc, cyclomatic_complexity, token_count, parameter_count, etc. Or an customized file. Lizard will report warning if a function exceed the limit''', action=DictAction, dest="thresholds", default={}) parser.add_argument("-W", "--whitelist", help='''The path and file name to the whitelist file. It's './whitelizard.txt' by default. Find more information in README.''', type=str, dest="whitelist", default=DEFAULT_WHITELIST) parser.usage = '''lizard [options] [PATH or FILE] [PATH] ...''' parser.description = __doc__ return parser
def detect(filename): for lan in languages(): if lan.match_filename(filename): return lan.language_names[0]