oinume journal

Scratchpad of what I learned

ruby-lint - Static syntax checker for Ruby

Recently I found static syntax checker for Ruby called ruby-lint. We haven't had such a syntax checker for Ruby, so I'm very happy to find it. (Although it's alpha quality)

Installation

$ gem install ruby-lint

Try

Prepare following ruby code.

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
a = 'hoge'
puts "hello" + b

ruby-lint it!!

$ ruby-lint hoge.rb
hoge.rb: error: line 4, column 15: undefined local variable or method b
hoge.rb: warning: line 3, column 0: assigned but unused local variable a

I cheer an author of ruby-lint. This is a great software!

The Rapid Rubyist (English Edition)

The Rapid Rubyist (English Edition)

MacのrbenvでRuby 1.9.3-p392インストール時にopenssl関連のエラー

MacのLionで

$ rbenv install 1.9.3-p392

するとこんな感じのエラーが出てきてビルドできなかった。

BUILD FAILED

Inspect or clean up the working tree at /var/folders/7k/6qhgc57n3nj7qbd_h2xpd1cm0000gn/T/ruby-build.20130720093657.99813
Results logged to /var/folders/7k/6qhgc57n3nj7qbd_h2xpd1cm0000gn/T/ruby-build.20130720093657.99813.log

Last 10 log lines:
ossl_x509store.c: In function ‘ossl_x509stctx_set_flags’:
ossl_x509store.c:520: warning: ‘X509_STORE_CTX_set_flags’ is deprecated (declared at /usr/include/openssl/x509_vfy.h:464)
ossl_x509store.c: In function ‘ossl_x509stctx_set_purpose’:
ossl_x509store.c:532: warning: ‘X509_STORE_CTX_set_purpose’ is deprecated (declared at /usr/include/openssl/x509_vfy.h:460)
ossl_x509store.c: In function ‘ossl_x509stctx_set_trust’:
ossl_x509store.c:544: warning: ‘X509_STORE_CTX_set_trust’ is deprecated (declared at /usr/include/openssl/x509_vfy.h:461)
ossl_x509store.c: In function ‘ossl_x509stctx_set_time’:
ossl_x509store.c:561: warning: ‘X509_STORE_CTX_set_time’ is deprecated (declared at /usr/include/openssl/x509_vfy.h:466)
linking shared-object openssl.bundle
make: *** [build-ext] Error 2

いろいろ調べた結果、brew で readline と openssl をインストールして、そのインストール先のディレクトリをrbenvに渡してやればいいらしい。

$ brew install readline openssl
$ export CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`"
$ rbenv install 1.9.3-p392

メタプログラミングRuby

メタプログラミングRuby

Emacs + ruby-lint + flymakeでRubyのソースを静的チェック

以前[permalink id=499]ruby-lintでRubyのソースを静的チェック[/permalink]で紹介したように、ruby-lintを使えばRubyのソースを静的にチェックすることができるので、これを使ってRubyのソースを保存するときにflymakeするEmacsの設定を書いてみた。(前提として、ruby-lintをインストールしておく必要がある。"gem install ruby-lint"でOK)

 

 

(defun flymake-ruby-init ()

(let* *1

(local-file (file-relative-name

temp-file

(file-name-directory buffer-file-name))))

(list "ruby-lint" (list local-file))))

 

(defconst flymake-allowed-ruby-file-name-masks

'*2

(ad-activate 'flymake-post-syntax-check)

(setq flymake-allowed-file-name-masks

(append flymake-allowed-file-name-masks flymake-allowed-ruby-file-name-masks))

(setq flymake-err-line-patterns flymake-ruby-err-line-patterns)

(flymake-mode t))

 

;(add-hook 'ruby-mode-hook '(lambda () (flymake-ruby-load)))

(add-hook

'ruby-mode-hook

'(lambda ()

;; rhtmlファイルではflymakeしない

(if (not (null buffer-file-name)) (flymake-ruby-load))

))

 

 

動作イメージ

 

Emacsでruby-lint + flymakeでRubyのソースを静的チェック

 

[tmkm-amazon]4774150029[/tmkm-amazon]

*1:temp-file (flymake-init-create-temp-buffer-copy

'flymake-create-temp-inplace

*2:"\.rb$" flymake-ruby-init)

("^Rakefile$" flymake-ruby-init)))

(defvar flymake-ruby-err-line-patterns

'(("^\(.*\): .+: line \([0-9]+\), .+: \(.*\)$" 1 2 nil 3)))

; /tmp/a.rb: error: line 5, column 15: undefined local variable or method a

 

(defun flymake-ruby-load ()

(interactive)

(defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted)

(setq flymake-check-was-interrupted t

ruby-lintでRubyのソースを静的チェック

An English version of the post

 

自分の知る限り、RubyってPythonでいうpylintやpyflakesみたいなSyntaxh Checkerってなかったと思うんだけど、最近とある外人の人が作っているruby-lintというものを見つけたの軽く使ってみた。

 

インストール

ruby-1.9が必要。

 

$ gem install ruby-lint

 

 

ruby-lintを使ってみる

試しにこんな感じのソースをruby-lintにチェックさせてみる。

 

#!/usr/bin/env ruby

# -*- coding: utf-8 -*-

a = 'hoge'

puts "hello" + b

 

 

すると

 

$ ruby-lint hoge.rb

hoge.rb: error: line 4, column 15: undefined local variable or method b

hoge.rb: warning: line 3, column 0: assigned but unused local variable a

 

って言われる。変数 b が定義されてないエラーと、変数 a が使われてないよっていう警告を出してくれる。素晴らしい!!

 

これでRubyでのコーディングが捗りそう!まだアルファクォリティらしいけど期待大!

 

[tmkm-amazon]4774151661[/tmkm-amazon]

homebrewでMacに複数バージョンのrubyをインストールする

よく rvm や rbenv を使ってMac複数バージョンのrubyをインストールする例を見るんですが、「それhomebrewでもできるよ」って思ったのでメモ。

とりあえず最新版を入れる場合

2012/7/27時点ではruby-1.9.3-p194がインストールされるみたいです。

$ brew install ruby
$ export PATH=/usr/local/bin:$PATH
$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410)

別のバージョンのrubyをインストールする

続いて一つ前のバージョンを入れるために、利用可能なrubyのバージョン一覧を表示。

$ brew versions ruby
1.9.2-p290 git checkout 1f32fa4 /opt/local/Library/Formula/ruby.rb
1.9.3-p194 git checkout 3222ca1 /opt/local/Library/Formula/ruby.rb
1.9.3-p125 git checkout bf3dfa9 /opt/local/Library/Formula/ruby.rb
1.9.3-p0 git checkout 7338ed6 /opt/local/Library/Formula/ruby.rb
1.9.2-p180 git checkout 83ed494 /opt/local/Library/Formula/ruby.rb
1.9.2-p136 git checkout f282737 /opt/local/Library/Formula/ruby.rb
1.9.2-p0 git checkout 773915d /opt/local/Library/Formula/ruby.rb
1.9.1-p378 git checkout d0efd9e /opt/local/Library/Formula/ruby.rb
1.9.1-p376 git checkout e1b2fea /opt/local/Library/Formula/ruby.rb
1.9.1-p243 git checkout 90ca008 /opt/local/Library/Formula/ruby.rb
1.8.7-p174 git checkout 25ae159 /opt/local/Library/Formula/ruby.rb

$ cd /opt/local/
# 1.9.3-p125のFormulaを使う
$ git checkout b6aa338 Library/Formula/ruby.rb
# 今インストールされているものをいったん無効にする
$ brew unlink ruby
# 1.9.3-p125をインストール
$ brew install ruby

これでruby 1.9.3-p125が有効になった。

$ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643)

1.9.3-p194に戻したい場合は

$ brew switch ruby 1.9.3-p194

すればいい。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)