Skip to content
Snippets Groups Projects
Commit 8a7b3721 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Allow wildcard '*' to be used in --external option.

External classes can be now specified as patterns. For example
'Foo.*' to ignore all classes in Foo namespace.
parent 769e14c0
Branches
Tags
No related merge requests found
module JsDuck
# Handles patterns of external classes.
#
# A pattern can be a simple classname or a one with a wildcard "*".
class ExternalClasses
def initialize(classnames = [])
@class_names = {}
@patterns = []
classnames.each do |name|
if name =~ /\*/
@patterns << make_pattern(name)
else
@class_names[name] = true
end
end
end
# True if the classname matches an external class pattern.
def is?(classname)
@class_names[classname] || @patterns.any? {|p| classname =~ p }
end
def make_pattern(pattern)
Regexp.new("^" + pattern.split(/\*/, -1).map {|s| Regexp.escape(s) }.join(".*") + "$")
end
end
end
require 'jsduck/external_classes'
module JsDuck
# Provides information about relations between classes.
......@@ -13,8 +15,7 @@ module JsDuck
def initialize(classes = [], ignorables = [])
@classes = classes
@ignorables = {}
ignorables.each {|classname| @ignorables[classname] = true }
@external_classes = ExternalClasses.new(ignorables)
# First build class lookup table; building lookup tables for
# mixins and subclasses will depend on that.
......@@ -42,7 +43,7 @@ module JsDuck
# Returns true if class is in list of ignored classes.
def ignore?(classname)
@ignorables[classname]
@external_classes.is?(classname)
end
def each(&block)
......
require "jsduck/external_classes"
describe JsDuck::ExternalClasses do
before do
@external = JsDuck::ExternalClasses.new(["Foo", "Ns.bar.Baz", "Bla.*"])
end
it "matches simple classname" do
@external.is?("Foo").should == true
end
it "matches namespaced classname" do
@external.is?("Ns.bar.Baz").should == true
end
it "doesn't match completely different classname" do
@external.is?("Zap").should_not == true
end
it "doesn't match classname beginning like an external classname" do
@external.is?("Foo.Bar").should_not == true
end
it "matches external classname defined with a wildcard" do
@external.is?("Bla.Bla").should == true
end
it "escapes '.' correctly in external pattern and doesn't match a classname missing the dot" do
@external.is?("Bla_Bla").should == false
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment