require "tree_sitter"
require "./extract_symbols.cr"
class GitFOSS::Code::Indexer
VERSION = "0.1.0"
LANGUAGE = "c"
@parser = TreeSitter::Parser.new
@files = [] of String
@symbols = {} of String => Array(CodeSymbol)
def initialize
TreeSitter::Repository.preload_all
end
def files=(values : Array(String))
@files = values
end
def get_files_symbols : Hash(String, Array(CodeSymbol))
@files.each do |p|
@symbols[p] = get_symbols(p)
end
@symbols
end
def get_symbols(
file_path : String
) : Array(CodeSymbol)
symbols = [] of CodeSymbol
path = Path[file_path]
File.open(path) do |f|
file = RepositoryFile.new(
name: path.basename,
content: f.gets_to_end,
)
@parser = TreeSitter::Parser.new (LANGUAGE)
io = IO::Memory.new(file.content)
tree = @parser.parse(nil, io)
symbols = extract_symbols(
@parser,
tree.root_node,
file,
)
pp tree.root_node
pp symbols
end
symbols
end
end
code_indexer = GitFOSS::Code::Indexer.new
code_indexer.files = [
"/home/xana/Dev/crystal-os/src/kernel/archive/c/main.c"
]
symbols = code_indexer.get_files_symbols
pp symbols