Chromium Code Reviews| Index: tools/sort_sources.py |
| diff --git a/tools/sort_sources.py b/tools/sort_sources.py |
| index 63f1afdb6d7e7d338d8605cc7fe2c40ab2c2fb78..3769d5d690de89ce32e3334fb4ff4072a64356fb 100755 |
| --- a/tools/sort_sources.py |
| +++ b/tools/sort_sources.py |
| @@ -7,6 +7,81 @@ |
| Shows a diff and prompts for confirmation before doing the deed. |
| Works great with tools/git/for-all-touched-files.py. |
| + |
| +Limitations: |
| + |
| +1) Comments used as section headers |
| + |
| +If a comment (1+ lines starting with #) appears in a source list without a |
| +preceding blank line, the tool assumes that the comment is about the next |
| +line. For example, given the following source list, |
| + |
| + sources = [ |
| + "b.cc", |
| + # Comment. |
| + "a.cc", |
| + "c.cc", |
| + ] |
| + |
| +the tool will produce the following output: |
| + |
| + sources = [ |
| + # Comment. |
| + "a.cc", |
| + "b.cc", |
| + "c.cc", |
| + ] |
| + |
| +This is not correct if the comment is for starting a new section like: |
| + |
| + sources = [ |
| + "b.cc", |
| + # These are for Linux. |
| + "a.cc", |
| + "c.cc", |
| + ] |
| + |
| +The tool cannot disambiguate the two types of comments. The problem can be |
| +worked around by inserting a blank line before the comment because the tool |
| +interprets a blank line as the end of a source list. |
|
Daniel Erat
2015/02/19 14:05:17
hmm, it may not be possible to always do this. i t
satorux1
2015/02/20 00:14:29
It should be OK. Here's from ash/BUILD.gn:
#
|
| + |
| +2) Sources commented out |
| + |
| +Sometimes sources are commented out with their positions kept in the |
| +alphabetical order, but what if the list is not sorted correctly? For |
| +example, given the following source list, |
| + |
| + sources = [ |
| + "a.cc", |
| + # "b.cc", |
| + "d.cc", |
| + "c.cc", |
| + ] |
| + |
| +the tool will produce the following output: |
| + |
| + sources = [ |
| + "a.cc", |
| + "c.cc", |
| + # "b.cc", |
| + "d.cc", |
| + ] |
| + |
| +This is because the tool assumes that the comment (# "b.cc",) is about the |
| +next line ("d.cc",). This kind of errors should be fixed manually. |
|
Daniel Erat
2015/02/19 14:05:17
maybe you should say that the fix is to not check
satorux1
2015/02/20 00:14:29
good point. added.
|
| + |
| +3) " and ' are used both used in the same source list (GYP only problem) |
| + |
| +If both " and ' are used in the same source list, sources quoted with " will |
| +appear first in the output. The problem is rare enough so the tool does not |
| +attempt to normalize them. Hence this kind of errors should be fixed |
| +manually. |
| + |
| +4) Spaces and tabs used in the same source list |
| + |
| +Similarly, if spaces and tabs are both used in the same source list, sources |
| +indented with tabs will appear first in the output. This kind of errors |
| +should be fixed manually. |
| """ |
| import difflib |
| @@ -18,9 +93,10 @@ from yes_no import YesNo |
| SUFFIXES = ['c', 'cc', 'cpp', 'h', 'mm', 'rc', 'rc.version', 'ico', 'def', |
| 'release'] |
| -SOURCE_PATTERN = re.compile('^\s+[\'"].*\.(%s)[\'"],$' % |
| +SOURCE_PATTERN = re.compile(r'^\s+[\'"].*\.(%s)[\'"],$' % |
| '|'.join([re.escape(x) for x in SUFFIXES])) |
| -COMMENT_PATTERN = re.compile('^\s+#') |
| +COMMENT_PATTERN = re.compile(r'^\s+#') |
| + |
| def SortSources(original_lines): |
| """Sort source file names in |original_lines|. |
| @@ -33,9 +109,8 @@ def SortSources(original_lines): |
| The algorithm is fairly naive. The code tries to find a list of C-ish |
| source file names by a simple regex, then sort them. The code does not try |
| - to understand the syntax of the build files, hence there are some cases |
| - that the code cannot handle correctly (ex. blank lines within a list of |
| - source file names). |
| + to understand the syntax of the build files. See the file comment above for |
| + details. |
| """ |
| output_lines = [] |
| @@ -45,7 +120,7 @@ def SortSources(original_lines): |
| if re.search(COMMENT_PATTERN, line): |
| comments.append(line) |
| elif re.search(SOURCE_PATTERN, line): |
| - # Associate the line with the preceeding comments. |
| + # Associate the line with the preceding comments. |
| sources.append([line, comments]) |
| comments = [] |
| else: |