Skip to content

Commit

Permalink
Add project name and version to docs generator
Browse files Browse the repository at this point in the history
  • Loading branch information
straight-shoota committed Apr 3, 2020
1 parent 0d2aa79 commit 76b684b
Show file tree
Hide file tree
Showing 9 changed files with 67 additions and 21 deletions.
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ LIB_CRYSTAL_TARGET = src/ext/libcrystal.a
DEPS = $(LLVM_EXT_OBJ) $(LIB_CRYSTAL_TARGET)
CFLAGS += -fPIC $(if $(debug),-g -O0)
CXXFLAGS += $(if $(debug),-g -O0)
CRYSTAL_VERSION ?= $(shell cat src/VERSION)

ifeq ($(shell command -v ld.lld >/dev/null && uname -s),Linux)
EXPORT_CC ?= CC="cc -fuse-ld=lld"
Expand Down Expand Up @@ -90,7 +91,7 @@ compiler_spec: $(O)/compiler_spec ## Run compiler specs

.PHONY: docs
docs: ## Generate standard library documentation
$(BUILD_PATH) ./bin/crystal docs src/docs_main.cr $(DOCS_OPTIONS)
$(BUILD_PATH) ./bin/crystal docs src/docs_main.cr $(DOCS_OPTIONS) --project-name=Crystal --project-version=$(CRYSTAL_VERSION)

.PHONY: crystal
crystal: $(O)/crystal ## Build the compiler
Expand Down
17 changes: 16 additions & 1 deletion src/compiler/crystal/command/docs.cr
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ class Crystal::Command
sitemap_base_url = nil
sitemap_priority = "1.0"
sitemap_changefreq = "never"
project_name = nil
project_version = "master"

compiler = Compiler.new

Expand All @@ -24,6 +26,14 @@ class Crystal::Command
Options:
BANNER

opts.on("--project-name=NAME", "Set project name") do |value|
project_name = value
end

opts.on("--project-version=VERSION", "Set project version") do |value|
project_version = value
end

opts.on("--output=DIR", "-o DIR", "Set the output directory (default: #{output_directory})") do |value|
output_directory = value
end
Expand Down Expand Up @@ -88,6 +98,10 @@ class Crystal::Command
setup_compiler_warning_options(opts, compiler)
end

unless project_name
abort "missing --project-name"
end

if options.empty?
sources = [Compiler::Source.new("require", %(require "./src/**"))]
included_dirs = [] of String
Expand All @@ -103,7 +117,8 @@ class Crystal::Command
compiler.wants_doc = true
result = compiler.top_level_semantic sources

Doc::Generator.new(result.program, included_dirs, output_directory, output_format, sitemap_base_url, sitemap_priority, sitemap_changefreq).run
project_info = Doc::ProjectInfo.new(project_name.not_nil!, project_version)
Doc::Generator.new(result.program, included_dirs, output_directory, output_format, sitemap_base_url, sitemap_priority, sitemap_changefreq, project_info).run

report_warnings result
exit 1 if warnings_fail_on_exit?(result)
Expand Down
12 changes: 8 additions & 4 deletions src/compiler/crystal/tools/doc/generator.cr
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
record Crystal::Doc::ProjectInfo, name : String, version : String

class Crystal::Doc::Generator
getter program : Program

@base_dir : String
property is_crystal_repo : Bool
@repository : String? = nil
getter repository_name = ""
getter project_info

# Adding a flag and associated css class will add support in parser
FLAG_COLORS = {
Expand All @@ -29,13 +32,14 @@ class Crystal::Doc::Generator
}

def self.new(program : Program, included_dirs : Array(String))
new(program, included_dirs, ".", "html", nil, "1.0", "never")
new(program, included_dirs, ".", "html", nil, "1.0", "never", ProjectInfo.new("test", "0.0.0-test"))
end

def initialize(@program : Program, @included_dirs : Array(String),
@output_dir : String, @output_format : String,
@sitemap_base_url : String?,
@sitemap_priority : String, @sitemap_changefreq : String)
@sitemap_priority : String, @sitemap_changefreq : String,
@project_info : ProjectInfo)
@base_dir = Dir.current.chomp
@types = {} of Crystal::Type => Doc::Type
@repo_name = ""
Expand Down Expand Up @@ -95,7 +99,7 @@ class Crystal::Doc::Generator
raw_body = read_readme
body = doc(program_type, raw_body)

File.write File.join(@output_dir, "index.html"), MainTemplate.new(body, types, repository_name)
File.write File.join(@output_dir, "index.html"), MainTemplate.new(body, types, project_info)

main_index = Main.new(raw_body, Type.new(self, @program), repository_name)
File.write File.join(@output_dir, "index.json"), main_index
Expand Down Expand Up @@ -124,7 +128,7 @@ class Crystal::Doc::Generator
filename = File.join(dir, "#{type.name}.html")
end

File.write filename, TypeTemplate.new(type, all_types)
File.write filename, TypeTemplate.new(type, all_types, project_info)

next if type.program?

Expand Down
12 changes: 12 additions & 0 deletions src/compiler/crystal/tools/doc/html/_sidebar.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@
<input type="search" class="search-input" placeholder="Search..." spellcheck="false" aria-label="Search">
</div>

<div class="project-summary">
<h1 class="project-name">
<a href="<%= current_type.try(&.path_to("")) %>index.html">
<%= project_info.name %>
</a>
</h1>

<span class="project-version">
<%= project_info.version %>
</span>
</div>

<div class="repository-links">
<a href="<%= current_type.try(&.path_to("")) %>index.html">README</a>
</div>
Expand Down
20 changes: 19 additions & 1 deletion src/compiler/crystal/tools/doc/html/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ body {
}

.sidebar .search-box {
padding: 8px 9px;
padding: 13px 9px;
}

.sidebar input {
Expand Down Expand Up @@ -106,6 +106,24 @@ body {
text-indent: 2px;
}

.project-summary {
display: inline-block;
padding: 9px 15px 30px 30px;
text-align: right;
}

.project-name {
font-size: 1.4rem;
margin: 0;
color: #f4f4f4;
font-weight: 600;
}

.project-version {
margin-top: 5px;
display: block;
}

.sidebar ul {
margin: 0;
padding: 0;
Expand Down
6 changes: 3 additions & 3 deletions src/compiler/crystal/tools/doc/html/main.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
<html lang="en">
<head>
<%= HeadTemplate.new("") %>
<meta id="repository-name" content="<%= repository_name %>">
<title>README - <%= repository_name %></title>
<meta id="repository-name" content="<%= project_info.name %>">
<title><%= project_info.name %> <%= project_info.version %></title>
<script type="text/javascript">
CrystalDoc.base_path = "";
</script>
</head>
<body>

<%= SidebarTemplate.new(repository_name, types, nil) %>
<%= SidebarTemplate.new(project_info, types, nil) %>

<div class="main-content">
<%= body %>
Expand Down
6 changes: 3 additions & 3 deletions src/compiler/crystal/tools/doc/html/type.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
<html lang="en">
<head>
<%= HeadTemplate.new(type.path_to "") %>
<meta id="repository-name" content="<%= type.repository_name %>">
<title><%= type.full_name %> - <%= type.repository_name %></title>
<meta id="repository-name" content="<%= project_info.name %>">
<title><%= type.full_name %> - <%= project_info.name %> <%= project_info.version %></title>
<script type="text/javascript">
CrystalDoc.base_path = "<%= type.path_to "" %>";
</script>
</head>
<body>

<%= SidebarTemplate.new(type.repository_name, types, type) %>
<%= SidebarTemplate.new(project_info, types, type) %>

<div class="main-content">
<h1 class="type-name">
Expand Down
6 changes: 3 additions & 3 deletions src/compiler/crystal/tools/doc/templates.cr
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ module Crystal::Doc
ANCHOR
end

record TypeTemplate, type : Type, types : Array(Type) do
record TypeTemplate, type : Type, types : Array(Type), project_info : ProjectInfo do
ECR.def_to_s "#{__DIR__}/html/type.html"
end

Expand All @@ -45,15 +45,15 @@ module Crystal::Doc
ECR.def_to_s "#{__DIR__}/html/_other_types.html"
end

record MainTemplate, body : String, types : Array(Type), repository_name : String do
record MainTemplate, body : String, types : Array(Type), project_info : ProjectInfo do
ECR.def_to_s "#{__DIR__}/html/main.html"
end

record HeadTemplate, base_path : String do
ECR.def_to_s "#{__DIR__}/html/_head.html"
end

record SidebarTemplate, repository_name : String, types : Array(Type), current_type : Type? do
record SidebarTemplate, project_info : ProjectInfo, types : Array(Type), current_type : Type? do
ECR.def_to_s "#{__DIR__}/html/_sidebar.html"
end

Expand Down
6 changes: 1 addition & 5 deletions src/compiler/crystal/tools/doc/type.cr
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,6 @@ class Crystal::Doc::Type
@generator.relative_locations(@type)
end

def repository_name
@generator.repository_name
end

def program?
@type.is_a?(Program)
end
Expand Down Expand Up @@ -795,7 +791,7 @@ class Crystal::Doc::Type
end
end
builder.field "locations", locations
builder.field "repository_name", repository_name
builder.field "repository_name", @generator.repository_name
builder.field "program", program?
builder.field "enum", enum?
builder.field "alias", alias?
Expand Down

0 comments on commit 76b684b

Please sign in to comment.