Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[docs] Compact some JSON fields for search #11438

Merged
merged 12 commits into from
Nov 29, 2021
Merged
4 changes: 2 additions & 2 deletions src/compiler/crystal/tools/doc/constant.cr
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ class Crystal::Doc::Constant
builder.field "id", id
builder.field "name", name
builder.field "value", value.try(&.to_s)
builder.field "doc", doc
builder.field "summary", formatted_summary
builder.field "doc", doc unless doc.nil?
builder.field "summary", formatted_summary unless formatted_summary.nil?
end
end

Expand Down
65 changes: 39 additions & 26 deletions src/compiler/crystal/tools/doc/html/js/_search.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,25 +41,36 @@ CrystalDocs.runQuery = function(query) {
});
}

type.instance_methods.forEach(function(method) {
searchMethod(method, type, "instance_method", query, results);
})
type.class_methods.forEach(function(method) {
searchMethod(method, type, "class_method", query, results);
})
type.constructors.forEach(function(constructor) {
searchMethod(constructor, type, "constructor", query, results);
})
type.macros.forEach(function(macro) {
searchMethod(macro, type, "macro", query, results);
})
type.constants.forEach(function(constant){
searchConstant(constant, type, query, results);
});

type.types.forEach(function(subtype){
searchType(subtype, query, results);
});
if (type.instance_methods) {
type.instance_methods.forEach(function(method) {
searchMethod(method, type, "instance_method", query, results);
})
}
if (type.class_methods) {
type.class_methods.forEach(function(method) {
searchMethod(method, type, "class_method", query, results);
})
}
if (type.constructors) {
type.constructors.forEach(function(constructor) {
searchMethod(constructor, type, "constructor", query, results);
})
}
if (type.macros) {
type.macros.forEach(function(macro) {
searchMethod(macro, type, "macro", query, results);
})
}
if (type.constants) {
type.constants.forEach(function(constant){
searchConstant(constant, type, query, results);
});
}
if (type.types) {
type.types.forEach(function(subtype){
searchType(subtype, query, results);
});
}
};

function searchMethod(method, type, kind, query, results) {
Expand All @@ -71,13 +82,15 @@ CrystalDocs.runQuery = function(query) {
matchedFields.push("name");
}

method.args.forEach(function(arg){
var argMatches = query.matches(arg.external_name);
if (argMatches) {
matches = matches.concat(argMatches);
matchedFields.push("args");
}
});
if (method.args) {
method.args.forEach(function(arg){
var argMatches = query.matches(arg.external_name);
if (argMatches) {
matches = matches.concat(argMatches);
matchedFields.push("args");
}
});
}

var docMatches = query.matches(type.doc);
if(docMatches){
Expand Down
12 changes: 6 additions & 6 deletions src/compiler/crystal/tools/doc/macro.cr
Original file line number Diff line number Diff line change
Expand Up @@ -148,13 +148,13 @@ class Crystal::Doc::Macro
builder.object do
builder.field "html_id", id
builder.field "name", name
builder.field "doc", doc
builder.field "summary", formatted_summary
builder.field "doc", doc unless doc.nil?
builder.field "summary", formatted_summary unless formatted_summary.nil?
builder.field "abstract", abstract?
builder.field "args", args
builder.field "args_string", args_to_s
builder.field "args_html", args_to_html
builder.field "location", location
builder.field "args", args unless args.empty?
builder.field "args_string", args_to_s unless args.empty?
builder.field "args_html", args_to_html unless args.empty?
builder.field "location", location unless location.nil?
builder.field "def", self.macro
end
end
Expand Down
12 changes: 6 additions & 6 deletions src/compiler/crystal/tools/doc/method.cr
Original file line number Diff line number Diff line change
Expand Up @@ -322,13 +322,13 @@ class Crystal::Doc::Method
builder.object do
builder.field "html_id", id
builder.field "name", name
builder.field "doc", doc
builder.field "summary", formatted_summary
builder.field "doc", doc unless doc.nil?
builder.field "summary", formatted_summary unless formatted_summary.nil?
builder.field "abstract", abstract?
builder.field "args", args
builder.field "args_string", args_to_s
builder.field "args_html", args_to_html
builder.field "location", location
builder.field "args", args unless args.empty?
builder.field "args_string", args_to_s unless args.empty?
builder.field "args_html", args_to_html unless args.empty?
builder.field "location", location unless location.nil?
builder.field "def", self.def
end
end
Expand Down
24 changes: 12 additions & 12 deletions src/compiler/crystal/tools/doc/to_json.cr
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ class Crystal::Arg
def to_json(builder : JSON::Builder)
builder.object do
builder.field "name", name
builder.field "doc", doc
builder.field "default_value", default_value.to_s
builder.field "doc", doc unless doc.nil?
builder.field "default_value", default_value.to_s unless default_value.nil?
builder.field "external_name", external_name.to_s
builder.field "restriction", restriction.to_s
end
Expand All @@ -14,12 +14,12 @@ class Crystal::Def
def to_json(builder : JSON::Builder)
builder.object do
builder.field "name", name
builder.field "args", args
builder.field "double_splat", double_splat
builder.field "splat_index", splat_index
builder.field "yields", yields
builder.field "block_arg", block_arg
builder.field "return_type", return_type.to_s
builder.field "args", args unless args.empty?
builder.field "double_splat", double_splat unless double_splat.nil?
builder.field "splat_index", splat_index unless splat_index.nil?
builder.field "yields", yields unless yields.nil?
builder.field "block_arg", block_arg unless block_arg.nil?
builder.field "return_type", return_type.to_s unless return_type.nil?
builder.field "visibility", visibility.to_s
builder.field "body", body.to_s
end
Expand All @@ -30,10 +30,10 @@ class Crystal::Macro
def to_json(builder : JSON::Builder)
builder.object do
builder.field "name", name
builder.field "args", args
builder.field "double_splat", double_splat
builder.field "splat_index", splat_index
builder.field "block_arg", block_arg
builder.field "args", args unless args.empty?
builder.field "double_splat", double_splat unless double_splat.nil?
builder.field "splat_index", splat_index unless splat_index.nil?
builder.field "block_arg", block_arg unless block_arg.nil?
builder.field "visibility", visibility.to_s
builder.field "body", body.to_s
end
Expand Down
64 changes: 37 additions & 27 deletions src/compiler/crystal/tools/doc/type.cr
Original file line number Diff line number Diff line change
Expand Up @@ -786,49 +786,59 @@ class Crystal::Doc::Type
builder.field "full_name", full_name
builder.field "name", name
builder.field "abstract", abstract?
builder.field "superclass" { (s = superclass) ? s.to_json_simple(builder) : builder.null }
builder.field "ancestors" do
builder.array do
ancestors.each &.to_json_simple(builder)
builder.field "superclass" { superclass.try &.to_json_simple(builder) } unless superclass.nil?
unless ancestors.empty?
builder.field "ancestors" do
builder.array do
ancestors.each &.to_json_simple(builder)
end
end
end
builder.field "locations", locations
builder.field "repository_name", @generator.project_info.name
builder.field "program", program?
builder.field "enum", enum?
builder.field "alias", alias?
builder.field "aliased", alias? ? alias_definition.to_s : nil
builder.field "aliased_html", alias? ? formatted_alias_definition : nil
builder.field "aliased", alias_definition.to_s if alias?
builder.field "aliased_html", formatted_alias_definition if alias?
builder.field "const", const?
builder.field "constants", constants
builder.field "included_modules" do
builder.array do
included_modules.each &.to_json_simple(builder)
builder.field "constants", constants unless constants.empty?
unless included_modules.empty?
builder.field "included_modules" do
builder.array do
included_modules.each &.to_json_simple(builder)
end
end
end
builder.field "extended_modules" do
builder.array do
extended_modules.each &.to_json_simple(builder)
unless extended_modules.empty?
builder.field "extended_modules" do
builder.array do
extended_modules.each &.to_json_simple(builder)
end
end
end
builder.field "subclasses" do
builder.array do
subclasses.each &.to_json_simple(builder)
unless subclasses.empty?
builder.field "subclasses" do
builder.array do
subclasses.each &.to_json_simple(builder)
end
end
end
builder.field "including_types" do
builder.array do
including_types.each &.to_json_simple(builder)
unless including_types.empty?
builder.field "including_types" do
builder.array do
including_types.each &.to_json_simple(builder)
end
end
end
builder.field "namespace" { (n = namespace) ? n.to_json_simple(builder) : builder.null }
builder.field "doc", doc
builder.field "summary", formatted_summary
builder.field "class_methods", class_methods
builder.field "constructors", constructors
builder.field "instance_methods", instance_methods
builder.field "macros", macros
builder.field "types", types
builder.field "namespace" { namespace.try &.to_json_simple(builder) } unless namespace.nil?
builder.field "doc", doc unless doc.nil?
builder.field "summary", formatted_summary unless formatted_summary.nil?
builder.field "class_methods", class_methods unless class_methods.empty?
builder.field "constructors", constructors unless constructors.empty?
builder.field "instance_methods", instance_methods unless instance_methods.empty?
builder.field "macros", macros unless macros.empty?
builder.field "types", types unless types.empty?
end
end

Expand Down