class JsDuck::Process::CircularDeps
Checks for circular dependencies
Public Class Methods
new(classes)
click to toggle source
# File lib/jsduck/process/circular_deps.rb, line 8 def initialize(classes) @classes = classes end
Public Instance Methods
check(cls, names = [])
click to toggle source
Checks class for circular dependencies.
When all OK, returns false.
When circular dependencies found returns a string describing the problematic dependency chain e.g. “Foo extends Bar mixins Foo”.
# File lib/jsduck/process/circular_deps.rb, line 30 def check(cls, names = []) names += [cls[:name]] if cls.parent && chain = track_circular(" extends ", cls.parent, names) return chain end cls.mixins.each do |mixin| if chain = track_circular(" mixins ", mixin, names) return chain end end false end
process_all!()
click to toggle source
Checks all classes for circular dependencies.
When found, exits with a fatal error message.
# File lib/jsduck/process/circular_deps.rb, line 15 def process_all! @classes.each do |cls| if chain = check(cls) Logger.fatal("Class #{cls[:name]} has a circular dependency: #{chain}") exit 1 end end end
track_circular(type, cls, names)
click to toggle source
# File lib/jsduck/process/circular_deps.rb, line 46 def track_circular(type, cls, names) names += [type] if names.include?(cls[:name]) (names + [cls[:name]]).join("") else check(cls, names) end end