#!/usr/bin/python import gdata.codesearch.service import string import sys import time client = gdata.codesearch.service.CodesearchService() initial_chars = sorted(string.lowercase + '$_') all_chars = sorted(initial_chars + list(string.digits)) def char_range(start, end): if (ord(end) > ord(start) + 2): return start + '-' + end else: return ''.join(map(chr, range(ord(start), ord(end) + 1))) def char_pattern(chars): pattern = '[' i = iter(chars) start = i.next() end = start try: while True: c = i.next() if (ord(c) == ord(end) + 1): end = c else: pattern += char_range(start, end) start = c end = start except StopIteration: pattern += char_range(start, end) pattern += ']' return pattern query_count = 0 def query(x): global query_count query_count += 1 print >>sys.stderr, query_count, x pattern = r'sprintf\s*\(\s*' + x + r'\s*,\s*"%s[^"]*"\s*,\s*' + x + r'\s*,' while True: try: return client.GetSnippetsFeed(pattern).entry except Exception, e: print >>sys.stderr, str(e) time.sleep(10) def search(x, chars): if query(x + char_pattern(chars) + char_pattern(all_chars) + '*'): if len(chars) == 1: x += chars[0] for entry in query(x): for match in entry.match: print entry.package.name + ":" + entry.file.name + ":" + match.line_number + ": " + match.text[len("
"):-len("\n
")] chars = all_chars mid = len(chars) // 2 search(x, chars[:mid]) search(x, chars[mid:]) if __name__ == '__main__': search('', initial_chars)