Improve REPL autocompletion

- case insensitive
- any substring will trigger a match
This commit is contained in:
Itay R
2016-04-19 16:57:18 +03:00
parent b48d3fcdef
commit 9ce85bb563
+6 -2
View File
@@ -9,6 +9,7 @@ def main():
import json
import os
import platform
import re
from prompt_toolkit.shortcuts import create_prompt_application, create_output, create_eventloop
from prompt_toolkit.history import FileHistory
from prompt_toolkit.completion import Completion, Completer
@@ -417,7 +418,7 @@ rpc.exports.evaluate = function (expression) {
} catch (e) {
[];
}"""):
if key.startswith(after_dot):
if self._pattern_matches(after_dot, key):
yield Completion(key, -len(after_dot))
else:
if magic:
@@ -425,7 +426,7 @@ rpc.exports.evaluate = function (expression) {
else:
keys = self._get_keys("Object.getOwnPropertyNames(this)")
for key in keys:
if not key.startswith(before_dot) or (key.startswith('_') and before_dot == ''):
if not self._pattern_matches(before_dot, key) or (key.startswith('_') and before_dot == ''):
continue
yield Completion(key, -len(before_dot))
except frida.InvalidOperationError:
@@ -442,6 +443,9 @@ rpc.exports.evaluate = function (expression) {
tokens = list(self._lexer.get_tokens(name))
return len(tokens) == 2 and tokens[0][0] in Token.Name.subtypes
def _pattern_matches(self, pattern, text):
return re.search(re.escape(pattern), text, re.IGNORECASE) != None
def hexdump(src, length=16):
try:
xrange