mirror of
https://github.com/ProgramSnail/Lama.git
synced 2025-12-06 14:58:50 +00:00
Add README for go-to-definition tool
Signed-off-by: Kakadu <Kakadu@pm.me>
This commit is contained in:
parent
a48db74053
commit
5356537fd0
4 changed files with 61 additions and 17 deletions
|
|
@ -1,22 +1,19 @@
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
|
||||||
GTD = gtd.exe
|
GTD = tool.exe
|
||||||
|
|
||||||
LAMA_CMXES = ../src/Language.cmx
|
LAMA_CMXES = ../src/Language.cmx
|
||||||
OCAMLC = ocamlfind c
|
OCAMLC = ocamlfind c
|
||||||
OCAMLOPT = ocamlfind opt
|
OCAMLOPT = ocamlfind opt
|
||||||
BFLAGS += -package GT,ostap,re,str -I ../src -rectypes -g
|
BFLAGS += -package GT,ostap,re,str -I ../src -rectypes -g
|
||||||
#GENERATED = Pprint_gt.ml Pprint_default.ml
|
|
||||||
|
|
||||||
all: $(GTD) $(OUT2)
|
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 $@
|
$(OCAMLOPT) $(BFLAGS) $(LAMA_CMXES) -linkpkg $^ -o $@
|
||||||
|
|
||||||
#$(OUT2): Pprint_gt.cmx Pprint_default.cmx demo_infix.cmx
|
|
||||||
# $(OCAMLOPT) $(BFLAGS) $(LAMA_CMXES) -linkpkg $^ -o $@
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) *.cmi *.cmo *.cmx *.annot *.o *.opt *.byte *~ .depend $(OUT) $(GENERATED)
|
$(RM) *.cmi *.cmo *.cmx *.annot *.o *.opt *.byte *~ .depend $(OUT) $(GENERATED)
|
||||||
|
|
@ -26,11 +23,3 @@ clean:
|
||||||
|
|
||||||
%.cmx: %.ml
|
%.cmx: %.ml
|
||||||
$(OCAMLOPT) -c $(BFLAGS) $<
|
$(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
40
tools/README.md
Normal 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
15
tools/demo1.lama
Normal 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
|
||||||
|
}
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
open Language
|
open Language
|
||||||
|
|
||||||
(* Test using:
|
(* 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:
|
should give:
|
||||||
found definition for `f` at (17,19)
|
found definition for `f` at (17,19)
|
||||||
Total 2 usages found
|
Total 2 usages found
|
||||||
(20,25) (20,22)
|
(5,25) (5,22)
|
||||||
*)
|
*)
|
||||||
type mode = GoToDef | Usages
|
type mode = GoToDef | Usages
|
||||||
type config =
|
type config =
|
||||||
|
|
@ -122,7 +122,7 @@ let () =
|
||||||
match Language.run_parser cfg with
|
match Language.run_parser cfg with
|
||||||
| `Fail s -> failwith s
|
| `Fail s -> failwith s
|
||||||
| `Ok ((_,_), e) ->
|
| `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
|
match do_find e with
|
||||||
| None -> Format.printf "Definition not found\n%!"
|
| None -> Format.printf "Definition not found\n%!"
|
||||||
| Some (name,(l,c)) ->
|
| Some (name,(l,c)) ->
|
||||||
Loading…
Add table
Add a link
Reference in a new issue