Skip to content

Instantly share code, notes, and snippets.

@kuy
Last active January 29, 2017 06:11
Show Gist options
  • Save kuy/b77ad79566f16f6d01f17451e4a3d2fb to your computer and use it in GitHub Desktop.
Save kuy/b77ad79566f16f6d01f17451e4a3d2fb to your computer and use it in GitHub Desktop.
Code reading of facebook/flow #1

Goal

Enumerate related modules when I execute flow check command.

Memo

src/flow.ml

ServerCommands.CheckCommand.command が呼び出される。

src/commands/serverCommands.ml

command の定義は 368 行目。main が呼び出される。 mainではオプションの処理をいろいろやって、Main.startを呼び出す。 Mainはファイル冒頭にあって、Server.FlowProgramを呼び出す。

src/server/server.ml

ServerFunctors.ServerMainによってhandle_clientが呼び出されて、 ServerProt.cmd_from_channelでコマンドを受け取る。 コマンドはrespondで処理される。 どこで flow checkCHECK_FILE にマッピングされているのかわからなかった。

check_file が呼び出される。チェックすべきか判定して、 Types_js.typecheck_contents が呼び出される。 結果は ServerProt.response_to_channel 経由で返す。

src/services/inference/types_js.ml

typecheck_contents では Parsing_service_js.do_parse を呼び出す。

src/parsing/parsing_service_js.ml

do_parse では parse_source_file を呼び出す。 parse_source_file では Parser_flow.program_file を呼び出す。

src/parser/parser_flow.ml

program_file => parse_program => do_parse を経て、 Parse.program が呼び出される。 Parse.program は再帰関数である。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment