vim-jp / ctags

Use https://ctags.io instead (This was fork of http://ctags.sourceforge.net/)
GNU General Public License v2.0
26 stars 7 forks source link

universal-ctags に還元すべきか #25

Closed mattn closed 9 years ago

mattn commented 9 years ago

http://ctags.io も出来た事だし、ここのパッチをマージして貰うべく働きかけるのはどうでしょうか? 意見募集。

koron commented 9 years ago

+1

masatake commented 9 years ago

大和と申します。 universal-ctags で作業をしています。

主要なパッチはこれになると理解しているのですが、正しいでしょうか。

http://sourceforge.net/p/ctags/patches/85/

以前からマージの相談をさせてもらいたい思っていたのですが、準備が進んでいなかったので控えていました。option関連の処理をあまり良く理解しないまま変更しすぎて、いつくか問題をかかています。

主要なパッチはこれになると理解しているのですが、正しいでしょうか。

http://sourceforge.net/p/ctags/patches/85/

mattn commented 9 years ago

こんにちわ。

https://github.com/universal-ctags/ctags/issues/44

このスレッドで一度お会いしましたね。

主要なパッチはこれになると理解しているのですが、正しいでしょうか。

はい。vim と整合性が取れるパッチとしてはこれかと思っています。(すみません他にマージしてもらうべきパッチがあれば申告下さい > all)

h-east commented 9 years ago

@mattn さんのmbcs対応patchだけでOKだと思います。

PS 私は今のところuniversal-ctagsに積極的に参加するつもりはないです。

mattn commented 9 years ago

@masatake さんに一応ニュアンスがずれないように日本語で説明しておくと現状の ctags はコメント部分に日本語があるとvimで見つけられないんです。vim はfileencodingsに従ってencodingオプションが示すエンコーディングに変換されたテキストを持っていてその行とctagsから見つけた行をマッチングするのでマッチしなくなるのです。できればtagsファイルは固定された1つのエンコーディングであって欲しい訳です。 TAGS_ENCODINGに自信のエンコーディングが書けるのでそこにutf-8と書いておき、あとは検査したソースファイルをutf-8に変換する仕組みがあればと思ってこのパッチを書きました。またプログラミング言語やOSによってはエンコーディングが異なる場合もあるのでオプションで個別設定出来る仕組みを追加しました。

masatake commented 9 years ago

エンコーディングの処理について経験が無いのですが、パッチの方を拝見したところ 大きな問題が無いように思います。(http://sourceforge.net/p/ctags/patches/85/)

もしPRを頂けるなら、ということを前提にそのときコメントするであろうことをここに 書きます。

  1. mbcs.[ch]について実際に作成なさった方(チーム)を Copyrightに指定して下さい。
  2. 私自身がGNU/Linuxだけを使っていることもあって、かなるの数の*.mkファイルを消しました。 その部分の調整が必要になると思います。
  3. テストケースの用意をお願いします。 universal ctagsにはパーザを試験するためのUnitsというテストハーネスがあるのですが... こちらは -o - の出力を拾います。今回は PseudoTag にパッチの成果が出るのでUnitsは使えません。 テストハーネスを直すと良いのですが、とりあえずより汎用の Tmain テストハーネス を使うのが良いです。https://github.com/universal-ctags/ctags/tree/master/Tmain/tmain-example.d が参考になるかと思います。make tmainで実行できます。https://github.com/universal-ctags/ctags/blob/master/docs/tmain.rst に簡単な説明があります。ご気軽にご質問下さい。
  4. お手数ですが、レビューの過程で、もしパッチの内部により汎用的な修正があれば、その部分だけマージさせて下さい。
mattn commented 9 years ago

一応、windows と linux でビルド出来るパッチはリライト出来ました。

https://github.com/mattn/ctags/tree/encoding-option

テストはもすこし時間が必要そうです。

k-takata commented 9 years ago

@mattn #14 の修正は反映済みでしょうか。(universal-ctagsに必要かどうかは未確認ですが…。) 関連commitは、 a73f4af4237f719d007393d42c62060470a8353a, 2525a1e41eb5540dd9ab08c049d8c0c26b966071 です。

masatake commented 9 years ago

ありがとうございます。--encoding-に関心があったので、試してみたのですが、うまく動かない場合があったので、修正してみました。とおもったら

https://github.com/mattn/ctags/tree/encoding-option

を用意頂いたので、以降、気付いたことがあったらこちらへの変更をPRとして提出します、というのでどうでしょうか?

あと --encoding-= のヘルプ文字列と、可能であれば --list-encodingで指定できるエンコーディングの一覧があると一層良いと思いました。「検査したソースファイル」の「検査」というのはctagsがエンコーディングを自動認識する、という意味でしょうか?関心があります。

mattn commented 9 years ago

@k-takata パッチが当たらないくらい universal-ctags と差異が出来てしまっていたので手動でマージさせてもらいました。ありがとうございます。

@masatake

用意頂いたので、以降、気付いたことがあったらこちらへの変更をPRとして提出します、というのでどうでしょうか?

はい。お願い致します。

あと --encoding-= のヘルプ文字列と、可能であれば --list-encodingで指定できるエンコーディングの一覧があると一層良いと思いました。

iconvlist という関数を使えば出来そうです。

「検査したソースファイル」の「検査」というのはctagsがエンコーディングを自動認識する、という意味でしょうか?関心があります。

「検査」はctags本来の仕事を実行したという意味で使いました。このパッチはエンコーディングの自動認識は行いません。エンコーディングの自動認識は iconv では辛いかと思います。 実際 vim も fileencodings=utf-8,cp932,euc-jp といった様に複数のエンコーディングを失敗しなくなるまで繰り返すという若干ツライ作りです。

masatake commented 9 years ago

「検査」はctags本来の仕事を実行したという意味で使いました。このパッチはエンコーディングの自動認識は行いません。エンコーディングの自動認識は iconv では辛いかと思います。 実際 vim も fileencodings=utf-8,cp932,euc-jp といった様に複数のエンコーディングを失敗しなくなるまで繰り返すという若干ツライ作りです。

なるほど。

言語やエディタによって、対象とするファイル自体にエンコーディングを記載しておくことができるものがあります。emacsであれば、ファイルの先頭に;; -- coding: utf-8 -- とあるとutf-8として取り扱います。きっとvimにもあると思っています。これを使うと良いのではないかと思いあたりました。universal ctagsではプログラミング言語の種類についてファイル名から解決できない場合でかつ、起動オプション -G が与えられていると ファイルの内容を調べて 上に示したようなマーカー(モードラインと呼んでいます。)を探してプログラミング言語の種類を特定しようとします。デフォルトでオンだったのですがコストがかかるので、オプションを指定した場合にだけ有効にすることになりました。この仕掛けを応用してエンコーディングについてファイル内に記載があれば、エンコーディングを指定できそうです。

mattn commented 9 years ago

なるほど。言語やエディタによって、対象とするファイル自体にエンコーディングを記載しておくことができるものがあります。emacsであれば、ファイルの先頭に;; -- coding: utf-8 -- とあるとutf-8として取り扱います。きっとvimにもあると思っています。これを使うと良いのではないかと思いあたりました。universal ctagsではプログラミング言語の種類についてファイル名から解決できない場合でかつ、起動オプション -G が与えられていると ファイルの内容を調べて 上に示したようなマーカー(モードラインと呼んでいます。)を探してプログラミング言語の種類を特定しようとします。デフォルトでオンだったのですがコストがかかるので、オプションを指定した場合にだけ有効にすることになりました。この仕掛けを応用してエンコーディングについてファイル内に記載があれば、エンコーディングを指定できそうです。

非常に残念なのですがvimのモードラインにはソースのエンコーディングを記述する事は出来ないのです。 理由はこの辺を参照下さい。

http://mattn.kaoriya.net/software/vim/20100626231727.htm

masatake commented 9 years ago

恐れいりました。うーん。

masatake commented 9 years ago

tagsファイルを活用するツール側の対応が必要ですが、--extra=+f で出力されるファイル自身に対するタグに encoding: 拡張フィールドがあると良さそうに思いました。...と際限が無いのでマージしてからやることにします。

mattn commented 9 years ago

--list-encoding 足しました。 https://github.com/mattn/ctags/commit/7b93eb732630e9bba13a29ca19ac3a439f3123b5

テスト足しました。 https://github.com/mattn/ctags/commit/7364363f034a6af39c5ae0dfd90c22d52fc86425

mattn commented 9 years ago

ただし --list-encoding は iconv のバージョンや提供元によってはAPIが存在しないので if defined(iconvlist) でない場合には動きません。

mattn commented 9 years ago

https://github.com/universal-ctags/ctags/pull/419

出しました。

mattn commented 9 years ago

@masatake 別件ですが ctags のリポジトリで ctags -R Units すると assert している様です。原因は分かりません。

k-takata commented 9 years ago

listEncoding も listEncodings にリネームした方がよい?

masatake commented 9 years ago

そうですね。ありがとうございます。

masatake commented 9 years ago

ctags -R Unitsが失敗するのは 数日前に導入したFortranのパーザに関連すると思います。ので無視して下さい。

tmainの作りがあまかったので、tagsファイルを比較できるように変更しました。またiconvを有効にしていない環境でskipできるように終了ステータスが77のときだけ特別扱いするようにしました。

これで、問題無くテストできました。universal-ctagsのmasterにTmainのテストハーネス側の変更を入れたのでrebaseしてもらえますか、その後tmainテストケースの方の変更を私から @mattn さんのリポジトリに出します。

masatake commented 9 years ago

すいません、Fortranについては間違いでした。もともとクラッシュを誘発するTODO扱いになっているテストケースがUnitsに含まれていて、それを踏んでいるようです。

Units/fuzz-hitting-assertions.r/d-fha-0.b/input.d

想定されるテストは make units で、これは通るので問題無い、として下さい。

https://github.com/universal-ctags/ctags/issues/386

mattn commented 9 years ago

feedback タグを作りました。オフィシャルに還元すべき物に付けていきます。

masatake commented 9 years ago

ありがとうございました。

mattn commented 9 years ago

こちらこそありがとうございました。

mattn commented 9 years ago

今後ですが、一旦この issue を閉じて、以後は vimmer 的な観点から universal-ctags へ contribute させて頂けたらと思います。

masatake commented 9 years ago

是非よろしくお願いします。楽しみにしています。