elixir/query.py
2017-02-05 21:26:39 +01:00

78 lines
1.8 KiB
Python
Executable file

#!/usr/bin/python3
from sys import argv
from lib import echo, script, scriptLines
import lib
import data
db = data.DB()
cmd = argv[1]
if cmd == 'versions':
p = script ('list-tags')
echo (p)
elif cmd == 'dir':
version = argv[2]
path = argv[3]
p = script ('get-dir', version, path)
echo (p)
elif cmd == 'file':
version = argv[2]
path = argv[3]
ext = path[-2:]
if ext == '.c' or ext == '.h':
tokens = scriptLines ('tokenize-file', version, path)
toBe = True
for tok in tokens:
toBe = not toBe
if toBe and db.defs.exists (tok) and lib.isIdent (tok):
tok = b'\033[31m' + tok + b'\033[0m'
else:
tok = lib.unescape (tok)
echo (tok)
else:
p = script ('get-file', version, path)
echo (p)
elif cmd == 'ident':
version = argv[2]
ident = argv[3]
if not db.defs.exists (ident):
print (argv[0] + ': Unknown identifier: ' + ident)
exit()
vers = db.vers.get (version).iter()
defs = db.defs.get (ident).iter (dummy=True)
refs = db.refs.get (ident).iter (dummy=True)
id2, type, dline = next (defs)
id3, rlines = next (refs)
dBuf = []
rBuf = []
for id1, path in vers:
while id1 > id2:
id2, type, dline = next (defs)
while id1 > id3:
id3, rlines = next (refs)
if id1 == id2:
dBuf.append ((path, type, dline))
if id1 == id3:
rBuf.append ((path, rlines))
print ('Defined in', len (dBuf), 'files:')
for path, type, dline in sorted (dBuf):
print (path + ': ' + str (dline) + ' (' + type + ')')
print ('\nReferenced in', len (rBuf), 'files:')
for path, rlines in sorted (rBuf):
print (path + ': ' + rlines)
else:
print (argv[0] + ': Unknown subcommand: ' + cmd)