style: Remove style validators
authorAndreas Sandberg <andreas.sandberg@arm.com>
Wed, 30 Mar 2016 14:32:17 +0000 (15:32 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Wed, 30 Mar 2016 14:32:17 +0000 (15:32 +0100)
Style validators provide a subset of the style verifier functionality
and are only exposed through the "hg m5format" command. This
functionality seems to be both redundant and unused.

Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
--HG--
extra : rebase_source : f4847ac3ddc86f6684565b65a942e04979972a7b

util/hgstyle.py
util/style/validators.py [deleted file]

index ccb04a94f9a7acfe146a363894bde0e5e68ecc43..ecdec4b0fa7059d234bc71e699431732726f8897 100755 (executable)
@@ -50,8 +50,6 @@ current_dir = os.path.dirname(__file__)
 sys.path.insert(0, current_dir)
 
 from style.verifiers import all_verifiers
-from style.validators import all_validators
-from style.file_types import lang_type
 from style.style import MercurialUI, check_ignores
 from style.region import *
 
@@ -85,35 +83,6 @@ def modregions(wctx, fname):
     return mod_regions
 
 
-def validate(filename, verbose, exit_code):
-    lang = lang_type(filename)
-    if lang not in ('C', 'C++'):
-        return
-
-    def bad():
-        if exit_code is not None:
-            sys.exit(exit_code)
-
-    try:
-        f = file(filename, 'r')
-    except OSError:
-        if verbose > 0:
-            print 'could not open file %s' % filename
-        bad()
-        return None
-
-    vals = [ v(filename, verbose=(verbose > 1), language=lang)
-             for v in all_validators ]
-
-    for i, line in enumerate(f):
-        line = line.rstrip('\n')
-        for v in vals:
-            v.validate_line(i, line)
-
-
-    return vals
-
-
 def _modified_regions(repo, patterns, **kwargs):
     opt_all = kwargs.get('all', False)
     opt_no_ignore = kwargs.get('no_ignore', False)
@@ -198,37 +167,6 @@ def do_check_style(hgui, repo, *pats, **opts):
 
     return False
 
-def do_check_format(hgui, repo, *pats, **opts):
-    """check files for gem5 code formatting violations
-
-    Without an argument, checks all modified and added files for gem5
-    code formatting violations. A list of files can be specified to
-    limit the checker to a subset of the repository. The style rules
-    are normally applied on a diff of the repository state (i.e.,
-    added files are checked in their entirety while only modifications
-    of modified files are checked).
-
-    The --all option can be specified to include clean files and check
-    modified files in their entirety.
-    """
-    ui = MercurialUI(hgui, hgui.verbose)
-
-    verbose = 0
-    for fname, mod_regions in _modified_regions(repo, pats, **opts):
-        vals = validate(joinpath(repo.root, fname), verbose, None)
-        if vals is None:
-            return True
-        elif any([not v for v in vals]):
-            print "%s:" % fname
-            for v in vals:
-                v.dump()
-            result = ui.prompt("invalid formatting\n(i)gnore or (a)bort?",
-                               'ai', 'a')
-            if result == 'a':
-                return True
-
-    return False
-
 def check_hook(hooktype):
     if hooktype not in ('pretxncommit', 'pre-qrefresh'):
         raise AttributeError, \
@@ -247,17 +185,6 @@ def check_style(ui, repo, hooktype, **kwargs):
         traceback.print_exc()
         return True
 
-def check_format(ui, repo, hooktype, **kwargs):
-    check_hook(hooktype)
-    args = {}
-
-    try:
-        return do_check_format(ui, repo, **args)
-    except Exception, e:
-        import traceback
-        traceback.print_exc()
-        return True
-
 try:
     from mercurial.i18n import _
 except ImportError:
@@ -287,31 +214,9 @@ cmdtable = {
     '^m5style' : (
         do_check_style, all_opts + _common_region_options + commands.walkopts,
         _('hg m5style [-a] [FILE]...')),
-    '^m5format' :
-    ( do_check_format, [
-            ] + _common_region_options + commands.walkopts,
-      _('hg m5format [FILE]...')),
 }
 
 if __name__ == '__main__':
-    import argparse
-
-    parser = argparse.ArgumentParser(
-        description="Check a file for style violations")
-
-    parser.add_argument("--verbose", "-v", action="count",
-                        help="Produce verbose output")
-
-    parser.add_argument("file", metavar="FILE", nargs="+",
-                        type=str,
-                        help="Source file to inspect")
-
-    args = parser.parse_args()
-
-    for filename in args.file:
-        vals = validate(filename, verbose=args.verbose,
-                        exit_code=1)
-
-        if args.verbose > 0 and vals is not None:
-            for v in vals:
-                v.dump()
+    print >> sys.stderr, "This file cannot be used from the command line. Use"
+    print >> sys.stderr, "style.py instead."
+    sys.exit(1)
diff --git a/util/style/validators.py b/util/style/validators.py
deleted file mode 100644 (file)
index 2c1e594..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2014, 2016 ARM Limited
-# All rights reserved
-#
-# The license below extends only to copyright in the software and shall
-# not be construed as granting a license to any other intellectual
-# property including but not limited to intellectual property relating
-# to a hardware implementation of the functionality of the software
-# licensed hereunder.  You may use the software subject to the license
-# terms below provided that you ensure that this notice is replicated
-# unmodified and in its entirety in all distributions of the software,
-# modified or unmodified, in source code or in binary form.
-#
-# Copyright (c) 2006 The Regents of The University of Michigan
-# Copyright (c) 2007,2011 The Hewlett-Packard Development Company
-# Copyright (c) 2016 Advanced Micro Devices, Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# Authors: Nathan Binkert
-#          Steve Reinhardt
-#          Andreas Sandberg
-
-from abc import ABCMeta, abstractmethod
-import inspect
-import re
-import sys
-
-import style
-
-tabsize = 8
-lead = re.compile(r'^([ \t]+)')
-trail = re.compile(r'([ \t]+)$')
-any_control = re.compile(r'\b(if|while|for)([ \t]*)\(')
-
-class Validator(object):
-    """Base class for style validators
-
-    Validators analyze source files for common style violations and
-    produce source code style violation statistics. Unlike style
-    verifiers (see verifiers.py), they do not try to fix any style
-    violations violations.
-
-    Deprecation warning: These classes are currently only used by the
-    "hg m5format" command and not by any style hooks. New style
-    checkers should inherit from Verifier instead of Validator.
-
-    """
-
-    __metaclass__ = ABCMeta
-
-    def __init__(self, file_name, verbose=False, language=None):
-        self.file_name = file_name
-        self.verbose = verbose
-        self.bad = 0
-        self.language = language
-
-    def fail_line(self, line_no, line, message):
-        print '%s:%d>' % (self.file_name, line_no + 1), message
-        if self.verbose:
-            print line
-        self.bad += 1
-
-    def __nonzero__(self):
-        return self.bad == 0
-
-    @classmethod
-    def supported_lang(cls, language):
-        return True
-
-    @abstractmethod
-    def validate_line(self, line_no, line):
-        pass
-
-    @abstractmethod
-    def dump(self):
-        pass
-
-class SimpleValidator(Validator):
-    supported_langs = set()
-
-    def __init__(self, fail_message, dump_message, file_name, **kwargs):
-        super(SimpleValidator, self).__init__(file_name, **kwargs)
-
-        self.fail_message = fail_message
-        self.dump_message = dump_message
-
-    @classmethod
-    def supported_lang(cls, language):
-        return not cls.cupported_langs or language in cls.supported_langs
-
-    def validate_line(self, line_no, line):
-        if not self.simple_validate_line(line):
-            self.fail_line(line_no, line, self.fail_message)
-            return False
-        else:
-            return True
-
-    @abstractmethod
-    def simple_validate_line(self, line):
-        pass
-
-    def dump(self):
-        print self.dump_message % {
-            "bad" : self.bad
-        }
-
-class LineLength(Validator):
-    def __init__(self, *args, **kwargs):
-        super(LineLength, self).__init__(*args, **kwargs)
-
-        self.toolong80 = 0
-
-    def validate_line(self, line_no, line):
-        llen = style.normalized_len(line)
-        if llen == 80:
-            self.toolong80 += 1
-
-        if llen > 79:
-            self.fail_line(line_no, line, 'line too long (%d chars)' % llen)
-            return False
-        else:
-            return True
-
-    def dump(self):
-        print "%d violations of lines over 79 chars. " \
-            "%d of which are 80 chars exactly." % (self.bad, self.toolong80)
-
-class ControlSpacing(Validator):
-    supported_langs = set(('C', 'C++'))
-
-    def validate_line(self, line_no, line):
-        match = any_control.search(line)
-        if match and match.group(2) != " ":
-            stats.badcontrol += 1
-            self.fail_line(line_no, line,
-                           'improper spacing after %s' % match.group(1))
-            return False
-        else:
-            return True
-
-    def dump(self):
-        print "%d bad parens after if/while/for." % (self.bad, )
-
-class CarriageReturn(SimpleValidator):
-    def __init__(self, *args, **kwargs):
-        super(CarriageReturn, self).__init__(
-            "carriage return found",
-            "%(bad)d carriage returns found.",
-            *args, **kwargs)
-
-    def simple_validate_line(self, line):
-        return line.find('\r') == -1
-
-class TabIndent(SimpleValidator):
-    lead = re.compile(r'^([ \t]+)')
-
-    def __init__(self, *args, **kwargs):
-        super(TabIndent, self).__init__(
-            "using tabs to indent",
-            "%(bad)d cases of tabs to indent.",
-            *args, **kwargs)
-
-    def simple_validate_line(self, line):
-        match = TabIndent.lead.search(line)
-        return not (match and match.group(1).find('\t') != -1)
-
-class TrailingWhitespace(SimpleValidator):
-    trail = re.compile(r'([ \t]+)$')
-
-    def __init__(self, *args, **kwargs):
-        super(TrailingWhitespace, self).__init__(
-            "trailing whitespace",
-            "%(bad)d cases of whitespace at the end of a line.",
-            *args, **kwargs)
-
-    def simple_validate_line(self, line):
-        return not TrailingWhitespace.trail.search(line)
-
-def is_validator(cls):
-    """Determine if a class is a Validator that can be instantiated"""
-
-    return inspect.isclass(cls) and issubclass(cls, Validator) and \
-        not inspect.isabstract(cls)
-
-# list of all verifier classes
-all_validators = [ v for n, v in \
-                  inspect.getmembers(sys.modules[__name__], is_validator) ]
-