Sha256: f9eb81d8bdc3ea9666a088f665a7cceca2224faadb370ec2e6edbe1f7e3b9afd
Contents?: true
Size: 1.84 KB
Versions: 2
Compression:
Stored size: 1.84 KB
Contents
module Skeptic module Rules class MaxMethodArity DESCRIPTION = 'Limit the arguments count per method' MAX_METHOD_ARITY = 3 include SexpVisitor def initialize(limit = nil) @violations = [] @limit = limit || MAX_METHOD_ARITY end def apply_to(code, tokens, sexp) visit sexp self end def violations @violations.map do |method, arity| "#{method} has #{arity} arguments (maximum method arity: #{@limit})" end end def name "Maximum method arity (#@limit)" end private on :class do |name, parents, body| env.push :module => qualified_class_name(name) visit body env.pop end on :module do |name, body| env.push :module => qualified_class_name(name) visit body env.pop end on :def do |name, params, _| qualified_method_name = env[:module] + '#' + extract_name(name) env.push :method => qualified_method_name visit params env.pop end on :defs do |target, separator, name, params, body| method_name = extract_name(name) class_name = extract_name(target) class_name = env[:module] if class_name == 'self' qualified_method_name = class_name + '.' + method_name env.push :method => qualified_method_name visit params env.pop end on :params do |*params| check_max_arity(params) if params end def check_max_arity(params) arguments_count = extract_param_idents(params).size if arguments_count > @limit @violations << [env[:method], arguments_count] end end def qualified_class_name(name) [env[:module], extract_name(name)].compact.join('::') end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
skeptic-0.0.9 | lib/skeptic/rules/max_method_arity.rb |
skeptic-0.0.8 | lib/skeptic/rules/max_method_arity.rb |