Anonymous avatar Anonymous committed 5f82d95

filter: added ropemacs.filter for filtering resources

Comments (0)

Files changed (2)

ropemacs/filter.py

+from rope.base import exceptions
+
+
+def resources(project, rules):
+    """Find python files in the `project` matching `rules`
+
+    `rules` is a multi-line `str`; each line starts with either a '+'
+    or '-'.  Each '+' means include the file (or its children if it's
+    a folder) that comes after it.  '-' has the same meaning for
+    exclusion.
+
+    """
+    all_files = set(project.pycore.get_python_files())
+    files = None
+    for line in rules.splitlines():
+        if not line.strip():
+            continue
+        first, path = (line[0], line[1:])
+        if first not in '+-':
+            continue
+        try:
+            resource = project.get_resource(path)
+            if resource.is_folder():
+                matches = set(filter(lambda item: resource.contains(item),
+                                     all_files))
+            else:
+                matches = set([resource])
+            if first == '+':
+                if files is None:
+                    files = set()
+                files.update(matches)
+            if first == '-':
+                if files is None:
+                    files = set(all_files)
+                files -= matches
+        except exceptions.ResourceNotFoundError:
+            pass
+    if files is None:
+        return all_files
+    return files

ropemacs/refactor.py

 import rope.refactor.usefunction
 import rope.refactor.introduce_factory
 
-from ropemacs import dialog, lisputils
+from ropemacs import dialog, lisputils, filter
 
 
 class Refactoring(object):
 def _resources(project, text):
     if text is None or text.strip() == '':
         return None
-    result = []
-    for line in text.splitlines():
-        try:
-            if line.strip() != '':
-                result.append(project.get_resource(line.strip()))
-        except rope.base.exceptions.ResourceNotFoundError:
-            pass
-    return result
+    return filter.resources(project, text)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.