...
This commit is contained in:
80
_archive/openrpc/parser/splitter.py
Normal file
80
_archive/openrpc/parser/splitter.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from enum import Enum
|
||||
|
||||
from heroserver.openrpc.parser.cleaner import cleaner
|
||||
|
||||
|
||||
class CodeType(Enum):
|
||||
STRUCT = "struct"
|
||||
ENUM = "enum"
|
||||
FUNCTION = "function"
|
||||
|
||||
|
||||
def splitter(code: str):
|
||||
lines = code.split("\n")
|
||||
result = []
|
||||
current_block = None
|
||||
current_comments = []
|
||||
|
||||
for line in lines:
|
||||
line = line.replace("\t", " ")
|
||||
stripped_line = line.strip()
|
||||
|
||||
if stripped_line.startswith("//"):
|
||||
current_comments.append(stripped_line[2:].strip())
|
||||
elif stripped_line.startswith("struct "):
|
||||
if current_block:
|
||||
result.append(current_block)
|
||||
current_block = {
|
||||
"type": CodeType.STRUCT,
|
||||
"comments": current_comments,
|
||||
"block": line,
|
||||
}
|
||||
current_comments = []
|
||||
elif stripped_line.startswith("enum "):
|
||||
if current_block:
|
||||
result.append(current_block)
|
||||
current_block = {
|
||||
"type": CodeType.ENUM,
|
||||
"comments": current_comments,
|
||||
"block": line,
|
||||
}
|
||||
current_comments = []
|
||||
elif stripped_line.startswith("fn "):
|
||||
if current_block:
|
||||
result.append(current_block)
|
||||
current_block = {
|
||||
"type": CodeType.FUNCTION,
|
||||
"comments": current_comments,
|
||||
"block": line.split("{")[0].strip(),
|
||||
}
|
||||
current_comments = []
|
||||
elif current_block:
|
||||
if current_block["type"] == CodeType.STRUCT and stripped_line == "}":
|
||||
current_block["block"] += "\n" + line
|
||||
result.append(current_block)
|
||||
current_block = None
|
||||
elif current_block["type"] == CodeType.ENUM and stripped_line == "}":
|
||||
current_block["block"] += "\n" + line
|
||||
result.append(current_block)
|
||||
current_block = None
|
||||
elif current_block["type"] in [CodeType.STRUCT, CodeType.ENUM]:
|
||||
current_block["block"] += "\n" + line
|
||||
|
||||
if current_block:
|
||||
result.append(current_block)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from heroserver.openrpc.parser.cleaner import load
|
||||
|
||||
code = load("/root/code/git.threefold.info/projectmycelium/hero_server/lib/openrpclib/parser/examples")
|
||||
code = cleaner(code)
|
||||
# Test the function
|
||||
parsed_code = splitter(code)
|
||||
for item in parsed_code:
|
||||
print(f"Type: {item['type']}")
|
||||
print(f"Comments: {item['comments']}")
|
||||
print(f"Block:\n{item['block']}")
|
||||
print("-" * 50)
|
Reference in New Issue
Block a user