Improve comment parsing when checking for requires
This commit is contained in:
34
build.py
34
build.py
@@ -243,24 +243,24 @@ def build_lint_src_timestamp(t):
|
|||||||
|
|
||||||
def _strip_comments(lines):
|
def _strip_comments(lines):
|
||||||
# FIXME this is a horribe hack, we should use a proper JavaScript parser here
|
# FIXME this is a horribe hack, we should use a proper JavaScript parser here
|
||||||
in_comment = False
|
in_multiline_comment = False
|
||||||
|
lineno = 0
|
||||||
for line in lines:
|
for line in lines:
|
||||||
if in_comment:
|
lineno += 1
|
||||||
|
if in_multiline_comment:
|
||||||
index = line.find('*/')
|
index = line.find('*/')
|
||||||
if index != -1:
|
if index != -1:
|
||||||
in_comment = False
|
in_multiline_comment = False
|
||||||
yield line[index + 2:]
|
line = line[index + 2:]
|
||||||
else:
|
if not in_multiline_comment:
|
||||||
|
line = re.sub(r'//[^\n]*', '', line)
|
||||||
|
line = re.sub(r'/\*.*?\*/', '', line)
|
||||||
index = line.find('/*')
|
index = line.find('/*')
|
||||||
if index != -1:
|
if index != -1:
|
||||||
yield line[:index]
|
yield lineno, line[:index]
|
||||||
in_comment = True
|
in_multiline_comment = True
|
||||||
else:
|
else:
|
||||||
index = line.find('//')
|
yield lineno, line
|
||||||
if index != -1:
|
|
||||||
yield line[:index]
|
|
||||||
else:
|
|
||||||
yield line
|
|
||||||
|
|
||||||
|
|
||||||
@target('build/check-requires-timestamp', SRC, INTERNAL_SRC, EXTERNAL_SRC, EXAMPLES_SRC, SPEC)
|
@target('build/check-requires-timestamp', SRC, INTERNAL_SRC, EXTERNAL_SRC, EXAMPLES_SRC, SPEC)
|
||||||
@@ -272,10 +272,8 @@ def build_check_requires_timestamp(t):
|
|||||||
continue
|
continue
|
||||||
require_linenos = {}
|
require_linenos = {}
|
||||||
uses = set()
|
uses = set()
|
||||||
lineno = 0
|
|
||||||
lines = open(filename).readlines()
|
lines = open(filename).readlines()
|
||||||
for line in lines:
|
for lineno, line in _strip_comments(lines):
|
||||||
lineno += 1
|
|
||||||
m = re.match(r'goog.provide\(\'(.*)\'\);', line)
|
m = re.match(r'goog.provide\(\'(.*)\'\);', line)
|
||||||
if m:
|
if m:
|
||||||
all_provides.add(m.group(1))
|
all_provides.add(m.group(1))
|
||||||
@@ -284,7 +282,7 @@ def build_check_requires_timestamp(t):
|
|||||||
if m:
|
if m:
|
||||||
require_linenos[m.group(1)] = lineno
|
require_linenos[m.group(1)] = lineno
|
||||||
continue
|
continue
|
||||||
for line in lines:
|
for lineno, line in _strip_comments(lines):
|
||||||
for require in require_linenos.iterkeys():
|
for require in require_linenos.iterkeys():
|
||||||
if require in line:
|
if require in line:
|
||||||
uses.add(require)
|
uses.add(require)
|
||||||
@@ -302,9 +300,7 @@ def build_check_requires_timestamp(t):
|
|||||||
provides = set()
|
provides = set()
|
||||||
requires = set()
|
requires = set()
|
||||||
uses = set()
|
uses = set()
|
||||||
lineno = 0
|
for lineno, line in _strip_comments(open(filename)):
|
||||||
for line in _strip_comments(open(filename)):
|
|
||||||
lineno += 1
|
|
||||||
m = re.match(r'goog.provide\(\'(.*)\'\);', line)
|
m = re.match(r'goog.provide\(\'(.*)\'\);', line)
|
||||||
if m:
|
if m:
|
||||||
provides.add(m.group(1))
|
provides.add(m.group(1))
|
||||||
|
|||||||
Reference in New Issue
Block a user