NeuronCheckは、Ruby 2.1以降で正式導入された「Refinement」機能を使うことで、より短く、言語と統合されたかのような書き方を使うことができるようになっています。
この機能をNeuronCheckSyntaxと呼びます。

たとえば、NeuronCheckSyntaxを使わないとき、引数と戻り値のチェック宣言は下記のようになりますが……

require 'neuroncheck'

class Converter
  extend NeuronCheck

  ndecl {
    args String, respondable(:each), [Numeric, nil]
    returns String
  }
  def convert(text, keywords, threshold = nil)
    # (メイン処理)
  end
end

class Token
  extend NeuronCheck

  ndecl { args String }
  def initialize(name)
    # (メイン処理)
  end
end

Ruby2.1以降で、using NeuronCheckSyntaxを実行すると、下記のような書き方に変えることができます。

require 'neuroncheck'
using NeuronCheckSyntax

class Converter
  decl String, respondable(:each), [Numeric, nil] => String
  def convert(text, keywords, threshold = nil)
    # (メイン処理)
  end
end

class Token
  decl String
  def initialize(name)
    # (メイン処理)
  end
end

using NeuronCheckSyntaxをファイルの頭で実行することで、そのファイル内でのみ下記のような効果が発生します。

  • 各クラスごと/モジュールごとのextendが不要になります。 これは多数のクラスやモジュールを宣言したいときに便利です。

  • Rubypeライクなndeclの短縮記法が使えるようになります。 通常はブロックの中でargs, returnsを宣言する必要がありますが、上記のコードではブロックを使わず、また引数と戻り値の両方を同時に宣言しています。もちろん、anyやrespondableなどの宣言用キーワードも使用可能です。

  • 細かい点ですが、ndeclのエイリアスとしてdeclが使えるようになります。同様にdeclare, sigもエイリアスとして使用可能になります。

typesigcheckはエイリアスとして使用できません。typesigはRubypeと衝突するためで、checkは一般的な動詞であり、かつメソッド名としての使用頻度が高いためです。

短縮記法における制限

ndeclの短縮記法には記法上の制限があり、引数が1つもないときに、下記のように記述することはできません。

class Token
  decl => String
  def inspect
    # (メイン処理)
  end
end

#=> SyntaxErrorが発生する

代わりに、下記のような記述を行ってください。

class Token
  decl [] => String
  def inspect
    # (メイン処理)
  end
end

# 正常に動作

(NeuronCheckは上記の記述に対して特殊な解釈を行い、「引数0個のメソッドである」ものとして扱います)