diff --git a/lib/jsduck/doc_formatter.rb b/lib/jsduck/doc_formatter.rb
index daf0590454c92abfe88c96e4f1a0593a39de1200..2a5593b9bbc24a95234ceefc745cc82f487a8b54 100644
--- a/lib/jsduck/doc_formatter.rb
+++ b/lib/jsduck/doc_formatter.rb
@@ -196,16 +196,20 @@ module JsDuck
end
def replace_class_names(input)
- input.gsub(/\b([A-Z][A-Za-z0-9.]*[A-Za-z0-9])(?:(#)([A-Za-z0-9]+))?\b/m) do
+ cls_re = "([A-Z][A-Za-z0-9.]*[A-Za-z0-9])"
+ member_re = "(?:#([A-Za-z0-9]+))"
+
+ input.gsub(/\b#{cls_re}#{member_re}?\b|#{member_re}\b/m) do
cls = $1
- hash = $2
- member = $3
+ member = $2 || $3
- if @relations[cls] && (member ? get_matching_member(cls, member) : cls =~ /\./)
+ if cls && @relations[cls] && (member ? get_matching_member(cls, member) : cls =~ /\./)
label = member ? cls+"."+member : cls
link(cls, member, label)
+ elsif !cls && member && get_matching_member(@class_context, member)
+ link(@class_context, member, member)
else
- cls + (hash || "") + (member || "")
+ "#{cls}#{member ? '#' : ''}#{member}"
end
end
end
diff --git a/spec/doc_formatter_spec.rb b/spec/doc_formatter_spec.rb
index 17c4f7eccee937358e2fb520784e1f8d0ae040fb..d6f59ae0fec94606c9dc56e6589c7ff865ef297f 100644
--- a/spec/doc_formatter_spec.rb
+++ b/spec/doc_formatter_spec.rb
@@ -116,6 +116,7 @@ describe JsDuck::DocFormatter do
# auto-conversion of identifiable ClassNames to links
describe "auto-detect" do
before do
+ @formatter.class_context = "Context"
@formatter.relations = JsDuck::Relations.new([
JsDuck::Class.new({:name => 'Foo.Bar'}),
JsDuck::Class.new({:name => 'Foo.Bar.Blah'}),
@@ -135,6 +136,12 @@ describe JsDuck::DocFormatter do
:method => [{:tagname => :method, :name => "encode", :id => "method-encode"}]
}
}),
+ JsDuck::Class.new({
+ :name => "Context",
+ :members => {
+ :method => [{:tagname => :method, :name => "bar", :id => "method-bar"}]
+ },
+ }),
])
end
@@ -193,6 +200,8 @@ describe JsDuck::DocFormatter do
'See: Foo.Bar, Ext.XTemplate'
end
+ # Links to #members
+
it "converts Ext#encode to method link" do
@formatter.replace("Look at Ext#encode").should ==
'Look at Ext.encode'
@@ -203,6 +212,16 @@ describe JsDuck::DocFormatter do
'Look at Ext.form.Field.getValues'
end
+ it "converts #bar to link to current class method" do
+ @formatter.replace("Look at #bar method").should ==
+ 'Look at bar method'
+ end
+
+ it "Doesn't convert #unknown to link" do
+ @formatter.replace("Ahh, an #unknown method").should ==
+ 'Ahh, an #unknown method'
+ end
+
# Ensure links aren't created inside ... or {@link} and {@img} tags.
it "doesn't create links inside {@link} tag" do