mirror of
https://github.com/ProgramSnail/Lama.git
synced 2025-12-05 22:38:44 +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
|
||||
|
||||
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
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
|
||||
|
||||
(* 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)) ->
|
||||
Loading…
Add table
Add a link
Reference in a new issue