[20110219] pfffについて

Preview:

DESCRIPTION

Python Hackathon 2011.02で発表したpfffの紹介。この時点ではまだバグが多いですが有用なツールだと思います。

Citation preview

pfff id : ymotongpoo

1  

2

まずはじめに 言っておきたい ことがある

3

pfffがうまく動かねえのは 俺のせいじゃねえ!

id : ymotongpoo

4

お前、誰よ? •  Sphinx-Users.jp 賑やかし担当

•  所属

•  翻訳とかしてます – Redis, Jinja2, Tornado...

•  YAMAGUCHI::weblog – http://d.hatena.ne.jp/ymotongpoo/

5

6

告知

7

#3 Organizer @moriyoshi @AE35 @MiCHiLU @ikasamt @ymotongpoo

いつやるか全然決まってねえ!

8

気をとりなおして

9

今日は Python Hackathon

なので

10

の話をすると思っただろ

11

OCaml製の PHP用ツール の話をします

12

pfffの話をします ぷ ふ  

13

で、pfffってなによ?

14

“Analyzer for code base”

建前

15

コードの雰囲気を見て いい感じか知るツール群

建前

関連ツール

•  ctags/gtags ‒ タグ作成 •  cscope ‒ C用ソースコードブラウザ •  lxr ‒ インデックス作成

16

建前

17

作者のOCamlへの愛とテンションで作られてる、聞こえがいいけど全然動かない物

実際

18

最初にひとつだけ 大事なことを お伝えしておきます

19

最新版&Mac OS上では ビルド出来ない/buggy なのでLinux環境あるならそこでやれ!

20

じゃあLinuxで やるとして

pfff Pre-requisition

•  OCaml 3.11.0以降 (3.11.2推奨) •  PCRE •  GTK2+ •  cairo2 •  pango

21

対応する言語 •  PHP •  OCaml •  JavaScript •  C •  C++ •  Java •  Tex •  Noweb

22

•  Lisp •  Scheme •  Haskell •  Erlang •  C# •  Python •  SQL •  Ruby

23

「おお、すげえ」と思うじゃないですか

将来対応するかもしれない言語 •  PHP •  OCaml •  JavaScript •  C •  C++ •  Java •  Tex •  Noweb

24

•  Lisp •  Scheme •  Haskell •  Erlang •  C# •  Python •  SQL •  Ruby

対応してる言語 •  PHP •  OCaml •  JavaScript •  C •  C++ •  Java •  Tex •  Noweb

25

•  Lisp •  Scheme •  Haskell •  Erlang •  C# •  Python •  SQL •  Ruby

26

とりあえず PHPしかまともに 対応してない

27

もとい

28

なのでPHPに 注力しています

pfffの構成ツール

•  pfff ‒ テストツール •  pfff_db ‒ 簡単なコード解析/DB作成 •  codemap ‒ コードの雰囲気可視化 •  sgrep ‒ 構文を考慮したgrep •  spatch ‒ 構文を考慮してpatch •  scheck ‒ コード上のミスを発見 •  stags ‒ ETAGSより詳細なタグ

29

pfff

• コードの静的解析ツール • 文法的に間違ってないか確認してくれる

30

$ pfff -parse_php <dir or file>  

sgrep

• 構文を考慮したgrep • 例)

31

$ sgrep -e ‘strstr(...) == false’ *.php  

$ find . ‒name *.php | xargs grep ‘strstr(...) == false’  

とどう違うの?  

sgrep

• 構文を考慮してくれる

32

$ sgrep -e ‘foo(..., 1, ...)’ *.php  

$hoge  =  $a-­‐>foo($spam,  1,  $egg) //  これは普通    $hoge  =  $a-­‐>foo($spam,                                    //  複数行でもOK                                                                1,                                                                $egg)  

spatch

• 構文を考慮してくれるpatch • パッチはこんな感じに書く

33

//remove_second_arg_foo.spatch foo(X -  ,Y ) //  remove_second_arg_foo_alt.spatch  -­‐        foo(X,Y)  +      foo(X)  

spatch

• パッチを当てる

34

$ spatch -c <patch> *.php  

scheck

• コード上のバグ発見ツール

•  PHPやJavaScriptなど、初期化されてないような変数を直接呼んじゃえるような場合に役立つ

35

scheck

• ユースケース

36

function foo($avar) { return $avarr; }

$  scheck  test.php  demos/scheck.php:4:9:  CHECK:  use  of  undefined  variable  $avarr  demos/scheck.php:3:13:  CHECK:  unused  Param  variable  $avar  

codemap

37

codemap

• 色とサイズで雰囲気が分かる • サイズがでかいファイル名ほど行数でかい • 関数名とかタグクラウドっぽくなってる – 呼ばれてる回数が多い関数ほどでかく書いてある

38

codemap

39

Linux  2.6  

codemap

40

Android  

codemap

•  GUIをダブルクリックするとemacsで開けたりする

• ここにめっちゃサンプルある – https://github.com/facebook/pfff/wiki/Examples

41

42

まあ、いま動かないにしても凄そうなのはわかった

43

でもPHPでしか 使えないんでしょ?

44

他言語対応用に 拡張書けるよ

lang_xxx

•  OCamlで書けばいいよー

•  字句解析器 –  lang_xxx/parsing/lexer_xxx.mll

•  抽象構文木生成器 –  lang_xxx/parsing/ast_xxx.ml

•  パーサー –  lang_xxx/parsing/ast_xxx.ml

45

46

ところで

47

「pfffについて話すよ」 って作者に言ったら

Wikiに紹介された

48

49

こんな発表で ごめんなさい>< でも頑張って!

50

まとめ

まとめ(2011/02/12時点)

•  sgrep, scheck, codemapあたりは便利そう

•  ただ動かない! •  ただただ動かない!

•  みんなどんどん使ってバグ報告しよう!

51

追記

• ちょうどPython Hackathon 2011.02の開催日に大量のアップデートがあってMac OS X+MacPortsでもビルドできるようになりました!

52

Recommended