Index: tools/resources/list_unused_grit_header.py |
diff --git a/tools/unused-grit-header.py b/tools/resources/list_unused_grit_header.py |
similarity index 79% |
rename from tools/unused-grit-header.py |
rename to tools/resources/list_unused_grit_header.py |
index 79c329d2fc7e350183626ceb6977d905c4bd6f35..49cf088dbf2d45acf37072d740a9c13880c48ed6 100755 |
--- a/tools/unused-grit-header.py |
+++ b/tools/resources/list_unused_grit_header.py |
@@ -3,17 +3,31 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-"""A tool to scan source files for unneeded grit includes.""" |
+"""A tool to scan source files for unneeded grit includes. |
+ |
+Example: |
+ cd /work/chrome/src |
+ tools/resources/list_unused_grit_header.py ui/strings/ui_strings.grd chrome ui |
+""" |
import os |
import sys |
import xml.etree.ElementTree |
+from find_unused_resources import GetBaseResourceId |
+ |
IF_ELSE_TAGS = ('if', 'else') |
def Usage(prog_name): |
- print prog_name, 'GRD_FILE DIRS_TO_SCAN' |
+ print prog_name, 'GRD_FILE PATHS_TO_SCAN' |
+ |
+ |
+def FilterResourceIds(resource_id): |
+ """If the resource starts with IDR_, find its base resource id.""" |
+ if resource_id.startswith('IDR_'): |
+ return GetBaseResourceId(resource_id) |
+ return resource_id |
def GetResourcesForNode(node, parent_file, resource_tag): |
@@ -42,6 +56,10 @@ def GetResourcesForNode(node, parent_file, resource_tag): |
resources.extend(GetResourcesForNode(part_root, part_file, resource_tag)) |
else: |
raise Exception('unknown tag:', child.tag) |
+ |
+ # Handle the special case for resources of type "FOO_{LEFT,RIGHT,TOP}". |
+ if resource_tag == 'structure': |
+ resources = [FilterResourceIds(resource_id) for resource_id in resources] |
return resources |
@@ -150,7 +168,6 @@ def NeedsGritInclude(grit_header, resources, filename): |
# A list of special keywords that implies the file needs grit headers. |
# To be more thorough, one would need to run a pre-processor. |
SPECIAL_KEYWORDS = ( |
- 'IMAGE_GRID(', # Macro in nine_image_painter_factory.h |
'#include "ui_localizer_table.h"', # ui_localizer.mm |
'DEFINE_RESOURCE_ID', # chrome/browser/android/resource_mapper.cc |
) |
@@ -177,8 +194,8 @@ def main(argv): |
Usage(argv[0]) |
return 1 |
grd_file = argv[1] |
- dirs_to_scan = argv[2:] |
- for f in dirs_to_scan: |
+ paths_to_scan = argv[2:] |
+ for f in paths_to_scan: |
if not os.path.exists(f): |
print 'Error: %s does not exist' % f |
return 1 |
@@ -191,14 +208,21 @@ def main(argv): |
resources = GetResourcesForGrdFile(tree, grd_file) |
files_with_unneeded_grit_includes = [] |
- for dir_to_scan in dirs_to_scan: |
- for root, dirs, files in os.walk(dir_to_scan): |
- if '.git' in dirs: |
- dirs.remove('.git') |
- full_paths = [os.path.join(root, f) for f in files if ShouldScanFile(f)] |
- files_with_unneeded_grit_includes.extend( |
- [f for f in full_paths |
- if not NeedsGritInclude(grit_header, resources, f)]) |
+ for path_to_scan in paths_to_scan: |
+ if os.path.isdir(path_to_scan): |
+ for root, dirs, files in os.walk(path_to_scan): |
+ if '.git' in dirs: |
+ dirs.remove('.git') |
+ full_paths = [os.path.join(root, f) for f in files if ShouldScanFile(f)] |
+ files_with_unneeded_grit_includes.extend( |
+ [f for f in full_paths |
+ if not NeedsGritInclude(grit_header, resources, f)]) |
+ elif os.path.isfile(path_to_scan): |
+ if not NeedsGritInclude(grit_header, resources, path_to_scan): |
+ files_with_unneeded_grit_includes.append(path_to_scan) |
+ else: |
+ print 'Warning: Skipping %s' % path_to_scan |
+ |
if files_with_unneeded_grit_includes: |
print '\n'.join(files_with_unneeded_grit_includes) |
return 2 |