Add README for go-to-definition tool

Signed-off-by: Kakadu <Kakadu@pm.me>
This commit is contained in:
Kakadu 2020-12-24 01:47:21 +03:00
parent a48db74053
commit 5356537fd0
4 changed files with 61 additions and 17 deletions

View file

@ -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 > $@

40
tools/README.md Normal file
View file

@ -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)
```
###### Поддерживаемые синтаксические конструкции
Утилита работает для определний функций, их аргументов и локальных определений переменных.

15
tools/demo1.lama Normal file
View file

@ -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
}

View file

@ -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)) ->