aboutsummaryrefslogtreecommitdiff
path: root/tools/closure_linter-2.3.4/closure_linter/common/simplefileflags.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/closure_linter-2.3.4/closure_linter/common/simplefileflags.py')
-rwxr-xr-xtools/closure_linter-2.3.4/closure_linter/common/simplefileflags.py190
1 files changed, 190 insertions, 0 deletions
diff --git a/tools/closure_linter-2.3.4/closure_linter/common/simplefileflags.py b/tools/closure_linter-2.3.4/closure_linter/common/simplefileflags.py
new file mode 100755
index 0000000..3402bef
--- /dev/null
+++ b/tools/closure_linter-2.3.4/closure_linter/common/simplefileflags.py
@@ -0,0 +1,190 @@
+#!/usr/bin/env python
+#
+# Copyright 2008 The Closure Linter Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS-IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Determines the list of files to be checked from command line arguments."""
+
+__author__ = ('robbyw@google.com (Robert Walker)',
+ 'ajp@google.com (Andy Perelson)')
+
+import glob
+import os
+import re
+
+import gflags as flags
+
+
+FLAGS = flags.FLAGS
+
+flags.DEFINE_multistring(
+ 'recurse',
+ None,
+ 'Recurse in to the subdirectories of the given path',
+ short_name='r')
+flags.DEFINE_list(
+ 'exclude_directories',
+ ('_demos'),
+ 'Exclude the specified directories (only applicable along with -r or '
+ '--presubmit)',
+ short_name='e')
+flags.DEFINE_list(
+ 'exclude_files',
+ ('deps.js'),
+ 'Exclude the specified files',
+ short_name='x')
+
+
+def MatchesSuffixes(filename, suffixes):
+ """Returns whether the given filename matches one of the given suffixes.
+
+ Args:
+ filename: Filename to check.
+ suffixes: Sequence of suffixes to check.
+
+ Returns:
+ Whether the given filename matches one of the given suffixes.
+ """
+ suffix = filename[filename.rfind('.'):]
+ return suffix in suffixes
+
+
+def _GetUserSpecifiedFiles(argv, suffixes):
+ """Returns files to be linted, specified directly on the command line.
+
+ Can handle the '*' wildcard in filenames, but no other wildcards.
+
+ Args:
+ argv: Sequence of command line arguments. The second and following arguments
+ are assumed to be files that should be linted.
+ suffixes: Expected suffixes for the file type being checked.
+
+ Returns:
+ A sequence of files to be linted.
+ """
+ files = argv[1:] or []
+ all_files = []
+ lint_files = []
+
+ # Perform any necessary globs.
+ for f in files:
+ if f.find('*') != -1:
+ for result in glob.glob(f):
+ all_files.append(result)
+ else:
+ all_files.append(f)
+
+ for f in all_files:
+ if MatchesSuffixes(f, suffixes):
+ lint_files.append(f)
+ return lint_files
+
+
+def _GetRecursiveFiles(suffixes):
+ """Returns files to be checked specified by the --recurse flag.
+
+ Args:
+ suffixes: Expected suffixes for the file type being checked.
+
+ Returns:
+ A list of files to be checked.
+ """
+ lint_files = []
+ # Perform any request recursion
+ if FLAGS.recurse:
+ for start in FLAGS.recurse:
+ for root, subdirs, files in os.walk(start):
+ for f in files:
+ if MatchesSuffixes(f, suffixes):
+ lint_files.append(os.path.join(root, f))
+ return lint_files
+
+
+def GetAllSpecifiedFiles(argv, suffixes):
+ """Returns all files specified by the user on the commandline.
+
+ Args:
+ argv: Sequence of command line arguments. The second and following arguments
+ are assumed to be files that should be linted.
+ suffixes: Expected suffixes for the file type
+
+ Returns:
+ A list of all files specified directly or indirectly (via flags) on the
+ command line by the user.
+ """
+ files = _GetUserSpecifiedFiles(argv, suffixes)
+
+ if FLAGS.recurse:
+ files += _GetRecursiveFiles(suffixes)
+
+ return FilterFiles(files)
+
+
+def FilterFiles(files):
+ """Filters the list of files to be linted be removing any excluded files.
+
+ Filters out files excluded using --exclude_files and --exclude_directories.
+
+ Args:
+ files: Sequence of files that needs filtering.
+
+ Returns:
+ Filtered list of files to be linted.
+ """
+ num_files = len(files)
+
+ ignore_dirs_regexs = []
+ for ignore in FLAGS.exclude_directories:
+ ignore_dirs_regexs.append(re.compile(r'(^|[\\/])%s[\\/]' % ignore))
+
+ result_files = []
+ for f in files:
+ add_file = True
+ for exclude in FLAGS.exclude_files:
+ if f.endswith('/' + exclude) or f == exclude:
+ add_file = False
+ break
+ for ignore in ignore_dirs_regexs:
+ if ignore.search(f):
+ # Break out of ignore loop so we don't add to
+ # filtered files.
+ add_file = False
+ break
+ if add_file:
+ # Convert everything to absolute paths so we can easily remove duplicates
+ # using a set.
+ result_files.append(os.path.abspath(f))
+
+ skipped = num_files - len(result_files)
+ if skipped:
+ print 'Skipping %d file(s).' % skipped
+
+ return set(result_files)
+
+
+def GetFileList(argv, file_type, suffixes):
+ """Parse the flags and return the list of files to check.
+
+ Args:
+ argv: Sequence of command line arguments.
+ suffixes: Sequence of acceptable suffixes for the file type.
+
+ Returns:
+ The list of files to check.
+ """
+ return sorted(GetAllSpecifiedFiles(argv, suffixes))
+
+
+def IsEmptyArgumentList(argv):
+ return not (len(argv[1:]) or FLAGS.recurse)