Files
zulip/tools/html-grep
Greg Price a099e698e2 py3: Switch almost all shebang lines to use python3.
This causes `upgrade-zulip-from-git`, as well as a no-option run of
`tools/build-release-tarball`, to produce a Zulip install running
Python 3, rather than Python 2.  In particular this means that the
virtualenv we create, in which all application code runs, is Python 3.

One shebang line, on `zulip-ec2-configure-interfaces`, explicitly
keeps Python 2, and at least one external ops script, `wal-e`, also
still runs on Python 2.  See discussion on the respective previous
commits that made those explicit.  There may also be some other
third-party scripts we use, outside of this source tree and running
outside our virtualenv, that still run on Python 2.
2017-08-16 17:54:43 -07:00

85 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python3
from __future__ import absolute_import
from __future__ import print_function
from lib.html_grep import grep
import optparse
import sys
from six.moves import filter
from typing import List
# check for the venv
from lib import sanity_check
sanity_check.check_venv(__file__)
import lister
USAGE = '''
This file greps HTML files for keywords in a context-sensitive manner.
Example:
$ ./tools/html-grep '#group-pms' '.filters'
templates/zerver/right_sidebar.html 45
div.right-sidebar#right-sidebar
div#group-pm-list
ul.filters.scrolling_list#group-pms
Keyword syntax:
When supplying keywords, they must correspond to HTML elements,
classes, or ids. Typical keywords are:
li // search for "<li>"
'.modal' // search for '<foo class="modal">'
'#intro' // search for '<bar id="intro">'
Searches are context-sensitive in the sense that the keyword
may be found among parent tags of a leaf tag, not just the leaf
tag itself. (Think of this as being similar to the way a
browser applies nested CSS styles; it looks at the whole HTML
tree.)
Finding files to search:
The tool currently searches your git repo for files with
the extension .html or .handlebars., and then it does
the grep against all those files.
TODO: allow specific files to be searched.
'''
def check_our_files():
# type: () -> None
parser = optparse.OptionParser(usage=USAGE)
parser.add_option('--modified', '-m',
action='store_true', default=False,
help='Only check modified files')
parser.add_option('--no-filter', '-a',
dest='show_all',
action='store_true', default=False,
help='Show all HTML files (no filtering)')
(options, args) = parser.parse_args()
if options.show_all:
keywords = [] # type: List[str]
else:
if not args:
print('No keywords specified...try --help or --no-filter')
sys.exit(1)
else:
keywords = args
files = lister.list_files(
modified_only=options.modified,
ftypes=['handlebars', 'html'],
)
fns = [fn for fn in files if ('casperjs' not in fn) and ('puppet/zulip' not in fn)]
grep(fns, set(keywords))
if __name__ == '__main__':
check_our_files()