Skip to content

Instantly share code, notes, and snippets.

@zurk

zurk/example.py Secret

Last active September 21, 2017 15:09
Show Gist options
  • Save zurk/8f7dd974347925ae62c31d9441491613 to your computer and use it in GitHub Desktop.
Save zurk/8f7dd974347925ae62c31d9441491613 to your computer and use it in GitHub Desktop.
Example for bblfsh identifiers with empty tokens.
import lib1
import lib2.lib21
import lib3 as lib3_alias
from lib4 import lib41
from lib5.lib51 import lib511
from lib6 import lib61 as lib611
var1 = None
var2 = None
class class1:
var11 = None
def __init__(self):
self.var101 = None
def func11(self):
class1.var111 = None
self.var112 = None
var113 = None
def func12():
def func121():
pass
class class2:
var21 = None
def func21(self):
None
def func22(self, arg1):
None
def func23():
None
class class3:
pass
<lib1>: ['IMPORT', 'PATHNAME', 'IDENTIFIER']
<lib2.lib21>: ['IMPORT', 'PATHNAME', 'IDENTIFIER']
<lib3>: ['IMPORT', 'PATHNAME', 'IDENTIFIER']
<lib3_alias>: ['IMPORT', 'ALIAS', 'IDENTIFIER']
<lib4>: ['IMPORT', 'PATHNAME', 'IDENTIFIER']
<lib41>: ['IMPORT', 'PATHNAME', 'IDENTIFIER']
<lib5.lib51>: ['IMPORT', 'PATHNAME', 'IDENTIFIER']
<lib511>: ['IMPORT', 'PATHNAME', 'IDENTIFIER']
<lib6>: ['IMPORT', 'PATHNAME', 'IDENTIFIER']
<lib61>: ['IMPORT', 'PATHNAME', 'IDENTIFIER']
<lib611>: ['IMPORT', 'ALIAS', 'IDENTIFIER']
<var1>: ['LEFT', 'IDENTIFIER', 'EXPRESSION']
<var2>: ['LEFT', 'IDENTIFIER', 'EXPRESSION']
<class1>: ['ENTRY', 'DECLARATION', 'IDENTIFIER', 'STATEMENT']
<var11>: ['LEFT', 'IDENTIFIER', 'EXPRESSION']
<__init__>: ['FUNCTION', 'DECLARATION', 'NAME', 'IDENTIFIER']
<>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<self>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<var101>: ['IDENTIFIER', 'EXPRESSION', 'LEFT']
<self>: ['IDENTIFIER', 'QUALIFIED', 'IDENTIFIER', 'EXPRESSION']
<func11>: ['FUNCTION', 'DECLARATION', 'NAME', 'IDENTIFIER']
<>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<self>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<var111>: ['IDENTIFIER', 'EXPRESSION', 'LEFT']
<class1>: ['IDENTIFIER', 'QUALIFIED', 'IDENTIFIER', 'EXPRESSION']
<var112>: ['IDENTIFIER', 'EXPRESSION', 'LEFT']
<self>: ['IDENTIFIER', 'QUALIFIED', 'IDENTIFIER', 'EXPRESSION']
<var113>: ['LEFT', 'IDENTIFIER', 'EXPRESSION']
<func12>: ['FUNCTION', 'DECLARATION', 'NAME', 'IDENTIFIER']
<func121>: ['FUNCTION', 'DECLARATION', 'NAME', 'IDENTIFIER']
<>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<class2>: ['ENTRY', 'DECLARATION', 'IDENTIFIER', 'STATEMENT']
<var21>: ['LEFT', 'IDENTIFIER', 'EXPRESSION']
<func21>: ['FUNCTION', 'DECLARATION', 'NAME', 'IDENTIFIER']
<>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<self>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<func22>: ['FUNCTION', 'DECLARATION', 'NAME', 'IDENTIFIER']
<>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<self>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<arg1>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<func23>: ['FUNCTION', 'DECLARATION', 'NAME', 'IDENTIFIER']
<>: ['FUNCTION', 'DECLARATION', 'ARGUMENT', 'NAME', 'IDENTIFIER']
<class3>: ['ENTRY', 'DECLARATION', 'IDENTIFIER', 'STATEMENT']
import bblfsh
from bblfsh import BblfshClient
client = BblfshClient("0.0.0.0:9432")
filepath = "./example.py"
import importlib
DESCRIPTOR = importlib.import_module(
"bblfsh.gopkg.in.bblfsh.sdk.%s.uast.generated_pb2" % bblfsh.sdkversion.VERSION).DESCRIPTOR
Node = importlib.import_module(
"bblfsh.gopkg.in.bblfsh.sdk.%s.uast.generated_pb2" % bblfsh.sdkversion.VERSION).Node
def _role_id(role_name):
return DESCRIPTOR.enum_types_by_name["Role"].values_by_name[role_name].number
def _role_name(role_id):
return DESCRIPTOR.enum_types_by_name["Role"].values_by_number[role_id].name
response = client.parse(filepath)
# Get all Simple Identifiers in UAST
tokens = []
for node in bblfsh.filter(response.uast, "//*[@roleIdentifier]"):
#if node.token == '':
# print(node)
tokens.append((node.token, [_role_name(k) for k in node.roles]))
print('\n'.join("<{}>:{} {}".format(t, " "* (12-len(t)), r) for t,r in tokens))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment