Hatena::Groupcatalyst

dann@catalyst このページをアンテナに追加 RSSフィード

2008-03-31

dbic

23:25 |  dbic - dann@catalyst を含むブックマーク はてなブックマーク -  dbic - dann@catalyst  dbic - dann@catalyst のブックマークコメント

Catalystはある程度わかったから、自分でたんたんと調べるだけで何とかなる気がしてきました。Catalyst Internalな話も知識は結構前のものだけど、もう1回読み直せばなんとかなりそう。多分、細かいところでいくらでも改善できる余地は残っていると思うのだけれど。

むしろ、DBICでわからないことのほうが圧倒的に多い。DBICについて、この日記上で続けるのがいいのかが少し微妙なところだから、どうするかだなぁ。

mod_perl2系で

23:25 |  mod_perl2系で - dann@catalyst を含むブックマーク はてなブックマーク -  mod_perl2系で - dann@catalyst  mod_perl2系で - dann@catalyst のブックマークコメント

Apache2::RequestUtilでrequest参照して、そこからpnotesに突っ込めばいいのか。

Catalystのプロジェクト用のタグ生成

| 22:55 |  Catalystのプロジェクト用のタグ生成 - dann@catalyst を含むブックマーク はてなブックマーク -  Catalystのプロジェクト用のタグ生成 - dann@catalyst  Catalystのプロジェクト用のタグ生成 - dann@catalyst のブックマークコメント

さっきのやつのctags版.

ctagspという名前でPATHの通ったところに保存。

#!/usr/bin/env perl
use strict;
use warnings;
use File::Basename qw(dirname);
use File::Spec::Functions qw(catfile);
use Cwd;

my $basedir = find_module_base();
die "Can't find module base directory\n" unless $basedir;

chdir($basedir) or die "chdir $basedir:$!";

run_ctags();
exit 0; # not reached

sub run_ctags {
    my @ctags = ('ctags', '-R');
    print STDERR "@ctags\n";
    exec(@ctags);
    die "exec failed: $!";
    # not reached.
}

sub find_module_base {
    my $curdir = shift || cwd;
    chomp($curdir);

    while ($curdir && $curdir ne '/') {
        return $curdir if looks_like_base($curdir);
        $curdir = dirname $curdir; # try ../
    }
    return; # not found.
}

sub looks_like_base {
    my $dir = shift;

    return ( -d catfile($dir, 't')
            && -e catfile($dir, 'README')
            && (-e catfile($dir, 'Makefile.PL')
                || -e catfile($dir, 'Build.PL')));
}

.vimrc

set tags+=./tags;/

~/.vim/ftplugin/perl.vim

noremap ,c <Esc>:!ctagsp<CR>

vim中からprove

| 20:55 |  vim中からprove - dann@catalyst を含むブックマーク はてなブックマーク -  vim中からprove - dann@catalyst  vim中からprove - dann@catalyst のブックマークコメント

emacsからprove

http://saltyduck.blog12.fc2.com/blog-entry-23.html

おぉ、そうかモジュールのディレクトリっぽいところを上に辿ってけばいいのか。vimだけでやること考えていたけど、この方法でいいですね。

/usr/local/bin/perlを/usr/bin/envに変えたのと、looks_like_baseの判定を緩くしました。

以下のコマンドをprvでPATHの通ったところに保存

#!/usr/bin/env perl
use strict;
use warnings;
use File::Basename qw(dirname);
use File::Spec::Functions qw(catfile);
use Cwd;

my @test_files = @ARGV;
@test_files = qw(t) unless @test_files;

my $basedir = find_module_base();
die "Can't find module base directory\n" unless $basedir;

chdir($basedir) or die "chdir $basedir:$!";

run_prove();
exit 0; # not reached

sub run_prove {
    my @prove = ('prove', '-vl', @test_files);
    print STDERR "@prove\n";
    exec(@prove);
    die "exec failed: $!";
    # not reached.
}

sub find_module_base {
    my $curdir = shift || cwd;
    chomp($curdir);

    while ($curdir && $curdir ne '/') {
        return $curdir if looks_like_base($curdir);
        $curdir = dirname $curdir; # try ../
    }
    return; # not found.
}

sub looks_like_base {
    my $dir = shift;

    return ( -d catfile($dir, 't')
            && -e catfile($dir, 'README')
            && (-e catfile($dir, 'Makefile.PL')
                || -e catfile($dir, 'Build.PL')));
}

~/.vim/ftplugin/perl.vimに以下を追加。

noremap ,t <Esc>:!prv -lv t/%<CR>

以下で書いていた問題は解決した。

http://catalyst.g.hatena.ne.jp/dann/20080330/1206892065

後はプロジェクトのディレクトリのtagの更新もこれベースでいける。vimで更新されたtagを読むにはどうすればいいかだけ調べないと。

vimをIDEっぽく使う (autocomplpop + ctags)

| 18:53 |  vimをIDEっぽく使う (autocomplpop + ctags) - dann@catalyst を含むブックマーク はてなブックマーク -  vimをIDEっぽく使う (autocomplpop + ctags) - dann@catalyst  vimをIDEっぽく使う (autocomplpop + ctags) - dann@catalyst のブックマークコメント

LLを使ううえで大変なことは、Eclipseがないことに尽きる。補完がしにくいし、ソースコードjumpがしにくい。けれど、これはautocomplpopとctagsを組み合わせると、Eclipseまで完璧ではないもののそれに近いことが実現できる。

  • ctags+vimで該当箇所へのjump
    • ポイントは、使うモジュールの全部のタグを作っておいて、cronでまわして生成しておくこと
    • ただし、Eclipseは型がわかっているから、一発で該当箇所にjumpできるけど、LLの場合だとそこまで完璧にはいかない。
    • Eclipseを使っていたときもJavaDoc(HTML)は使わないで、ライブラリのソースコードをattachしてEclipse上でソースコードをjumpしながら読んでいた。それに近い感じ。
  • autocomplpopでtagとbufferから補完
    • これで、がんがん補完できる。autoで補完候補がでるのが肝。

タグは以下のようなスクリプトをcronでまわしてタグを作っている。

#!/bin/sh

echo 'Generating tags for perl ...'
ctags -f ~/.vim/tags/perl/cpan.tags --recurse --totals \
    --exclude=blib \
    --exclude=.svn \
    --exclude='*~' \
    --languages=Perl --langmap=Perl:+.t \
    /usr/local/share/perl/5.8.8/

echo '\nGenerating tags for ruby ...'
ctags -f ~/.vim/tags/ruby/gems.tags --recurse --totals \
    --exclude=blib \
    --exclude=.svn \
    --exclude='*~' \
    --languages=Ruby \
    /var/lib/gems/1.8/gems/
トラックバック - http://catalyst.g.hatena.ne.jp/dann/20080331