Loading lib/jsduck/ast.rb +12 −5 Original line number Diff line number Diff line Loading @@ -13,17 +13,17 @@ module JsDuck exp = expression?(ast) ? ast["expression"] : nil var = var?(ast) ? ast["declarations"][0] : nil if exp && call?(exp) && ext_define?(exp) {:type => :class} if exp && ext_define?(exp) make_class(exp["arguments"][0]) elsif exp && assignment?(exp) && (ext_extend?(exp["right"]) || class_name?(exp["left"])) {:type => :class} make_class(exp["left"]) elsif var && (ext_extend?(var["init"]) || class_name?(var["id"])) {:type => :class} make_class(var["id"]) elsif function?(ast) && class_name?(ast["id"]) {:type => :class} make_class(ast["id"]) elsif function?(ast) make_method(ast["id"], ast) Loading Loading @@ -85,6 +85,13 @@ module JsDuck return to_s(ast).split(/\./).last =~ /\A[A-Z]/ end def make_class(name_ast, ast=nil) return { :type => :class, :name => to_s(name_ast) } end def make_method(name_ast, ast=nil) return { :type => :method, Loading spec/ast_class_spec.rb 0 → 100644 +44 −0 Original line number Diff line number Diff line require "jsduck/ast" require "jsduck/esprima_parser" describe "JsDuck::Ast detects class with" do def detect(string) node = JsDuck::EsprimaParser.new(string).parse[0] return JsDuck::Ast.new.detect(node[:code]) end describe "name in" do it "function declaration" do detect("/** */ function MyClass() {}")[:name].should == "MyClass" end it "function assignment" do detect("/** */ MyClass = function() {}")[:name].should == "MyClass" end it "function assignment to property" do detect("/** */ foo.MyClass = function() {}")[:name].should == "foo.MyClass" end it "var initialization with function" do detect("/** */ var MyClass = function() {}")[:name].should == "MyClass" end it "Ext.extend() assignment" do detect("/** */ MyClass = Ext.extend(Your.Class, { });")[:name].should == "MyClass" end it "var initialized with Ext.extend()" do detect("/** */ var MyClass = Ext.extend(Your.Class, { });")[:name].should == "MyClass" end it "Ext.define()" do detect(<<-EOS)[:name].should == "MyClass" /** */ Ext.define('MyClass', { }); EOS end end end Loading
lib/jsduck/ast.rb +12 −5 Original line number Diff line number Diff line Loading @@ -13,17 +13,17 @@ module JsDuck exp = expression?(ast) ? ast["expression"] : nil var = var?(ast) ? ast["declarations"][0] : nil if exp && call?(exp) && ext_define?(exp) {:type => :class} if exp && ext_define?(exp) make_class(exp["arguments"][0]) elsif exp && assignment?(exp) && (ext_extend?(exp["right"]) || class_name?(exp["left"])) {:type => :class} make_class(exp["left"]) elsif var && (ext_extend?(var["init"]) || class_name?(var["id"])) {:type => :class} make_class(var["id"]) elsif function?(ast) && class_name?(ast["id"]) {:type => :class} make_class(ast["id"]) elsif function?(ast) make_method(ast["id"], ast) Loading Loading @@ -85,6 +85,13 @@ module JsDuck return to_s(ast).split(/\./).last =~ /\A[A-Z]/ end def make_class(name_ast, ast=nil) return { :type => :class, :name => to_s(name_ast) } end def make_method(name_ast, ast=nil) return { :type => :method, Loading
spec/ast_class_spec.rb 0 → 100644 +44 −0 Original line number Diff line number Diff line require "jsduck/ast" require "jsduck/esprima_parser" describe "JsDuck::Ast detects class with" do def detect(string) node = JsDuck::EsprimaParser.new(string).parse[0] return JsDuck::Ast.new.detect(node[:code]) end describe "name in" do it "function declaration" do detect("/** */ function MyClass() {}")[:name].should == "MyClass" end it "function assignment" do detect("/** */ MyClass = function() {}")[:name].should == "MyClass" end it "function assignment to property" do detect("/** */ foo.MyClass = function() {}")[:name].should == "foo.MyClass" end it "var initialization with function" do detect("/** */ var MyClass = function() {}")[:name].should == "MyClass" end it "Ext.extend() assignment" do detect("/** */ MyClass = Ext.extend(Your.Class, { });")[:name].should == "MyClass" end it "var initialized with Ext.extend()" do detect("/** */ var MyClass = Ext.extend(Your.Class, { });")[:name].should == "MyClass" end it "Ext.define()" do detect(<<-EOS)[:name].should == "MyClass" /** */ Ext.define('MyClass', { }); EOS end end end