diff --git a/lib/jsduck/aggregator.rb b/lib/jsduck/aggregator.rb index d34f890cfa415cac9af589d091aaf8db929e19f9..e3de18b62883241af5384d4b32b2aa1b58e7f9bc 100644 --- a/lib/jsduck/aggregator.rb +++ b/lib/jsduck/aggregator.rb @@ -54,7 +54,7 @@ module JsDuck [:extends, :singleton, :private, :protected].each do |tag| old[tag] = old[tag] || new[tag] end - [:mixins, :alternateClassNames].each do |tag| + [:mixins, :alternateClassNames, :files].each do |tag| old[tag] = old[tag] + new[tag] end new[:xtypes].each_pair do |key, xtypes| @@ -144,9 +144,7 @@ module JsDuck :alternateClassNames => [], :members => Class.default_members_hash, :statics => Class.default_members_hash, - :filename => "", - :html_filename => "", - :linenr => 0, + :files => [{:filename => "", :html_filename => "", :linenr => 0}], }) end diff --git a/lib/jsduck/aliases.rb b/lib/jsduck/aliases.rb index 81ebccc6e5a02a5d9d3314ae331a675b62f576b2..236f983fe3de47ab8020d12e9a8fa7498d7769bb 100644 --- a/lib/jsduck/aliases.rb +++ b/lib/jsduck/aliases.rb @@ -28,16 +28,17 @@ module JsDuck # Given aliased member, finds the original member. # If the original also happens to be an alias, continue recursively. def find_original(al) + context = al[:files][0] al_def = al[:alias] orig = @relations[al_def[:cls]] unless orig - Logger.instance.warn("Class #{al_def[:cls]} not found", al[:filename], al[:linenr]) + Logger.instance.warn("Class #{al_def[:cls]} not found", context[:filename], context[:linenr]) return al end orig = orig.get_member(al_def[:member], al_def[:type] || al[:tagname]) unless orig - Logger.instance.warn("Member #{al_def[:cls]}##{al_def[:member]} not found", al[:filename], al[:linenr]) + Logger.instance.warn("Member #{al_def[:cls]}##{al_def[:member]} not found", context[:filename], context[:linenr]) return al end diff --git a/lib/jsduck/app.rb b/lib/jsduck/app.rb index bc2ceee9473ab90dba3e70ac725bf58a38bf57f0..43256c9d1ebc1e5059a59de7b2d835d1ce0ac081 100644 --- a/lib/jsduck/app.rb +++ b/lib/jsduck/app.rb @@ -144,9 +144,8 @@ module JsDuck else type = d[:tagname].to_s name = d[:name] - file = d[:filename] - line = d[:linenr] - Logger.instance.warn("Ignoring #{type}: #{name}", file, line) + file = d[:files][0] + Logger.instance.warn("Ignoring #{type}: #{name}", file[:filename], file[:linenr]) end end Relations.new(classes, @opts.external_classes) diff --git a/lib/jsduck/class.rb b/lib/jsduck/class.rb index 5cd70343c25e7fbb9a19087d150269894754b860..9b5272444905d7e159c36f58be6474afe1f2676f 100644 --- a/lib/jsduck/class.rb +++ b/lib/jsduck/class.rb @@ -61,7 +61,8 @@ module JsDuck if @relations[classname] @relations[classname] elsif !@relations.ignore?(classname) - Logger.instance.warn("Class #{classname} not found", @doc[:filename], @doc[:linenr]) + context = @doc[:files][0] + Logger.instance.warn("Class #{classname} not found", context[:filename], context[:linenr]) nil end end diff --git a/lib/jsduck/class_formatter.rb b/lib/jsduck/class_formatter.rb index d2e4bdf54e5bfc71d54ee87c6cab30effad0a9eb..dcec66901b3052d2f6ab8e914bf2d7f2c548be49 100644 --- a/lib/jsduck/class_formatter.rb +++ b/lib/jsduck/class_formatter.rb @@ -24,7 +24,7 @@ module JsDuck def format(cls) @cls = cls @formatter.class_context = cls[:name] - @formatter.doc_context = cls + @formatter.doc_context = cls[:files][0] cls[:doc] = @formatter.format(cls[:doc]) if cls[:doc] cls[:members].each_pair do |type, members| cls[:members][type] = members.reject {|m| m[:private] }.map {|m| format_member(m) } @@ -46,7 +46,7 @@ module JsDuck end def format_member(m) - @formatter.doc_context = m + @formatter.doc_context = m[:files][0] m[:doc] = @formatter.format(m[:doc]) if m[:doc] m[:deprecated][:text] = @formatter.format(m[:deprecated][:text]) if m[:deprecated] if expandable?(m) || @formatter.too_long?(m[:doc]) diff --git a/lib/jsduck/lint.rb b/lib/jsduck/lint.rb index 2af7dd8a09514b29f8fa64548206df9beeed8d7a..45714d2c750889cef12843f6ecdf5378391d0950 100644 --- a/lib/jsduck/lint.rb +++ b/lib/jsduck/lint.rb @@ -75,7 +75,8 @@ module JsDuck end # Prints warning + filename and linenumber from doc-context - def warn(msg, context) + def warn(msg, member) + context = member[:files][0] Logger.instance.warn(msg, context[:filename], context[:linenr]) end diff --git a/lib/jsduck/renderer.rb b/lib/jsduck/renderer.rb index 44bef33811f0399f89e072d08b7ea64e638df637..6b49194636737640237da811aef449f786c7cdf8 100644 --- a/lib/jsduck/renderer.rb +++ b/lib/jsduck/renderer.rb @@ -55,14 +55,16 @@ module JsDuck has_parents = @cls[:extends] && @cls[:extends] != "Object" has_alt_names = @cls[:alternateClassNames].length > 0 has_mixins = @cls[:superclasses].length > 0 + has_files = @cls[:files].length > 0 - return if !has_parents && !has_alt_names && !has_mixins + return if !has_parents && !has_alt_names && !has_mixins && !has_files return [ '
', render_alternate_class_names, render_tree, render_mixins, + render_files, '' ] end @@ -83,6 +85,19 @@ module JsDuck ] end + def render_files + return if @cls[:files].length == 0 + + return [ + "