From 5356537fd096f330989585c5db7dfabf76e67f3c Mon Sep 17 00:00:00 2001 From: Kakadu Date: Thu, 24 Dec 2020 01:47:21 +0300 Subject: [PATCH] Add README for go-to-definition tool Signed-off-by: Kakadu --- tools/Makefile | 17 +++------------ tools/README.md | 40 ++++++++++++++++++++++++++++++++++ tools/demo1.lama | 15 +++++++++++++ tools/{gtd_main.ml => tool.ml} | 6 ++--- 4 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 tools/README.md create mode 100644 tools/demo1.lama rename tools/{gtd_main.ml => tool.ml} (97%) diff --git a/tools/Makefile b/tools/Makefile index 2e81e3670..6e6535403 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,22 +1,19 @@ .PHONY: clean -GTD = gtd.exe +GTD = tool.exe LAMA_CMXES = ../src/Language.cmx OCAMLC = ocamlfind c OCAMLOPT = ocamlfind opt BFLAGS += -package GT,ostap,re,str -I ../src -rectypes -g -#GENERATED = Pprint_gt.ml Pprint_default.ml all: $(GTD) $(OUT2) -demo_infix.cmx bench_main.cmx: Pprint_gt.cmx Pprint_default.cmx -$(GTD): gtd_main.cmx + +$(GTD): tool.cmx $(OCAMLOPT) $(BFLAGS) $(LAMA_CMXES) -linkpkg $^ -o $@ -#$(OUT2): Pprint_gt.cmx Pprint_default.cmx demo_infix.cmx -# $(OCAMLOPT) $(BFLAGS) $(LAMA_CMXES) -linkpkg $^ -o $@ clean: $(RM) *.cmi *.cmo *.cmx *.annot *.o *.opt *.byte *~ .depend $(OUT) $(GENERATED) @@ -26,11 +23,3 @@ clean: %.cmx: %.ml $(OCAMLOPT) -c $(BFLAGS) $< - -############### -#Pprint_gt.ml: pp_gt.m4 p.ml -# m4 $< p.ml > $@ - -############### -#Pprint_default.ml: pp_default.m4 p.ml -# m4 $< p.ml > $@ diff --git a/tools/README.md b/tools/README.md new file mode 100644 index 000000000..dc2ac102e --- /dev/null +++ b/tools/README.md @@ -0,0 +1,40 @@ +##### Утилиты работы с программами на LaMa + +Утилита `tools/tool.exe` принимает следующие параметры командной строки + +* `-pos L,C` для указания позиции в исходном тексте, по которой необходимо найди идентификатор и его место определения (resolve) +* `-use` опциональный параметр, который кроме resolve проих-водит поиск использований этого идентификатора + +Пример входного файла: + +``` + 1 public fun foldl (f, acc, l) { + 2 -- ^-- (1,19) + 3 case l of + 4 {} -> acc + 5 | x : xs -> foldl (f, f (acc, x), xs) + 6 -- (5,22)--^ ^-- (5,25) + 7 esac + 8 } + 9 +10 public fun filter (f, l) { +11 case l of +12 {} -> {} +13 | h : t -> if f (h) then h : filter (f, t) else filter (f, t) fi +14 esac +15 } +``` + +Пример запуска: `LAMA=./runtime tools/tool.exe tools/demo1.lama -pos 5,22 -use` + +В выводе утилита находит определение символа `f` на позиции (1,19) и два его использования на позициях (5,25) и (5,22) + +``` +found definition for `f` at (1,19) +Total 2 usages found +(5,25) (5,22) +``` + +###### Поддерживаемые синтаксические конструкции + +Утилита работает для определний функций, их аргументов и локальных определений переменных. diff --git a/tools/demo1.lama b/tools/demo1.lama new file mode 100644 index 000000000..a3385aa43 --- /dev/null +++ b/tools/demo1.lama @@ -0,0 +1,15 @@ +public fun foldl (f, acc, l) { + -- ^-- (1,19) + case l of + {} -> acc + | x : xs -> foldl (f, f (acc, x), xs) + -- (5,22)--^ ^-- (5,25) + esac +} + +public fun filter (f, l) { + case l of + {} -> {} + | h : t -> if f (h) then h : filter (f, t) else filter (f, t) fi + esac +} diff --git a/tools/gtd_main.ml b/tools/tool.ml similarity index 97% rename from tools/gtd_main.ml rename to tools/tool.ml index 773ee6564..dd93d15a7 100644 --- a/tools/gtd_main.ml +++ b/tools/tool.ml @@ -1,11 +1,11 @@ open Language (* Test using: - mkae -C tools && LAMA=./runtime tools/gtd.exe stdlib/List.lama -pos 20,22 -use + mkae -C tools && LAMA=./runtime tools/gtd.exe tools/demo1.lama -pos 20,22 -use should give: found definition for `f` at (17,19) Total 2 usages found - (20,25) (20,22) + (5,25) (5,22) *) type mode = GoToDef | Usages type config = @@ -122,7 +122,7 @@ let () = match Language.run_parser cfg with | `Fail s -> failwith s | `Ok ((_,_), e) -> - Format.printf "%s\n%!" (GT.show Expr.t e); + (* Format.printf "%s\n%!" (GT.show Expr.t e); *) match do_find e with | None -> Format.printf "Definition not found\n%!" | Some (name,(l,c)) ->