vim/sadness/ropevim/src/ropemode/ropemode/filter.py @ 48cacfdc2ca6
vim: add ropevim
author |
Steve Losh <steve@stevelosh.com> |
date |
Wed, 06 Oct 2010 12:30:46 -0400 |
parents |
(none) |
children |
(none) |
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 = 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.strip())
except exceptions.ResourceNotFoundError:
continue
if resource.is_folder():
matches = set(filter(lambda item: resource.contains(item), all))
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 -= matches
if files is None:
return all
return files