Home | History | Annotate | Download | only in web_dev_style
      1 # Copyright 2014 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 
      6 def RegexCheck(re, line_number, line, regex, msg):
      7   """Searches for |regex| in |line| to check for a particular style
      8      violation, returning a message like the one below if the regex matches.
      9      The |regex| must have exactly one capturing group so that the relevant
     10      part of |line| can be highlighted. If more groups are needed, use
     11      "(?:...)" to make a non-capturing group. Sample message:
     12 
     13        line 6: Use var instead of const.
     14            const foo = bar();
     15            ^^^^^
     16   """
     17 
     18   def _highlight(match):
     19     """Takes a start position and a length, and produces a row of '^'s to
     20        highlight the corresponding part of a string.
     21     """
     22     return match.start(1) * ' ' + (match.end(1) - match.start(1)) * '^'
     23 
     24   match = re.search(regex, line)
     25   if match:
     26     assert len(match.groups()) == 1
     27     return '  line %d: %s\n%s\n%s' % (line_number, msg, line, _highlight(match))
     28   return ''
     29