jazzy 0.13.7 → 0.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/Tests.yml +6 -6
- data/.rubocop.yml +155 -24
- data/CHANGELOG.md +91 -0
- data/CONTRIBUTING.md +1 -1
- data/Dangerfile +11 -8
- data/Gemfile +3 -1
- data/Gemfile.lock +85 -64
- data/ObjectiveC.md +208 -0
- data/README.md +63 -33
- data/Rakefile +18 -15
- data/bin/jazzy +3 -2
- data/bin/sourcekitten +0 -0
- data/jazzy.gemspec +9 -6
- data/lib/jazzy/config.rb +135 -69
- data/lib/jazzy/doc.rb +3 -1
- data/lib/jazzy/doc_builder.rb +72 -83
- data/lib/jazzy/docset_builder.rb +3 -1
- data/lib/jazzy/documentation_generator.rb +6 -2
- data/lib/jazzy/executable.rb +3 -0
- data/lib/jazzy/extensions/bitbucket/img/bitbucket.svg +11 -0
- data/lib/jazzy/{themes/apple/assets → extensions/github}/img/gh.png +0 -0
- data/lib/jazzy/extensions/gitlab/img/gitlab.svg +23 -0
- data/lib/jazzy/gem_version.rb +3 -1
- data/lib/jazzy/highlighter.rb +5 -3
- data/lib/jazzy/jazzy_markdown.rb +75 -32
- data/lib/jazzy/podspec_documenter.rb +14 -16
- data/lib/jazzy/search_builder.rb +5 -6
- data/lib/jazzy/source_declaration/access_control_level.rb +7 -5
- data/lib/jazzy/source_declaration/type.rb +29 -3
- data/lib/jazzy/source_declaration.rb +22 -5
- data/lib/jazzy/source_document.rb +8 -5
- data/lib/jazzy/source_host.rb +111 -0
- data/lib/jazzy/source_mark.rb +8 -6
- data/lib/jazzy/source_module.rb +6 -6
- data/lib/jazzy/sourcekitten.rb +155 -81
- data/lib/jazzy/stats.rb +14 -3
- data/lib/jazzy/symbol_graph/constraint.rb +5 -1
- data/lib/jazzy/symbol_graph/ext_node.rb +3 -1
- data/lib/jazzy/symbol_graph/graph.rb +19 -12
- data/lib/jazzy/symbol_graph/relationship.rb +9 -0
- data/lib/jazzy/symbol_graph/sym_node.rb +25 -7
- data/lib/jazzy/symbol_graph/symbol.rb +54 -25
- data/lib/jazzy/symbol_graph.rb +43 -32
- data/lib/jazzy/themes/apple/assets/css/highlight.css.scss +63 -59
- data/lib/jazzy/themes/apple/assets/css/jazzy.css.scss +5 -1
- data/lib/jazzy/themes/apple/assets/js/jazzy.js +4 -0
- data/lib/jazzy/themes/apple/assets/js/jazzy.search.js +4 -0
- data/lib/jazzy/themes/apple/templates/doc.mustache +4 -5
- data/lib/jazzy/themes/apple/templates/footer.mustache +1 -1
- data/lib/jazzy/themes/apple/templates/header.mustache +6 -6
- data/lib/jazzy/themes/apple/templates/task.mustache +6 -11
- data/lib/jazzy/themes/fullwidth/assets/css/highlight.css.scss +63 -59
- data/lib/jazzy/themes/fullwidth/assets/css/jazzy.css.scss +6 -2
- data/lib/jazzy/themes/fullwidth/assets/js/jazzy.js +4 -0
- data/lib/jazzy/themes/fullwidth/assets/js/jazzy.search.js +4 -0
- data/lib/jazzy/themes/fullwidth/templates/doc.mustache +4 -5
- data/lib/jazzy/themes/fullwidth/templates/footer.mustache +1 -1
- data/lib/jazzy/themes/fullwidth/templates/header.mustache +8 -8
- data/lib/jazzy/themes/fullwidth/templates/task.mustache +6 -11
- data/lib/jazzy/themes/jony/assets/css/highlight.css.scss +63 -59
- data/lib/jazzy/themes/jony/assets/css/jazzy.css.scss +5 -1
- data/lib/jazzy/themes/jony/assets/js/jazzy.js +4 -0
- data/lib/jazzy/themes/jony/templates/doc.mustache +4 -5
- data/lib/jazzy/themes/jony/templates/footer.mustache +1 -1
- data/lib/jazzy/themes/jony/templates/header.mustache +6 -6
- data/lib/jazzy/themes/jony/templates/task.mustache +6 -11
- data/lib/jazzy.rb +2 -0
- data/spec/integration_spec.rb +46 -42
- data/spec/spec_helper/pre_flight.rb +2 -0
- data/spec/spec_helper.rb +3 -1
- metadata +32 -16
- data/lib/jazzy/themes/fullwidth/assets/img/gh.png +0 -0
- data/lib/jazzy/themes/jony/assets/img/gh.png +0 -0
- data/spec/sourcekitten_spec.rb +0 -6
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#-- Bootstrap --------------------------------------------------------------#
|
2
4
|
|
3
5
|
desc 'Initializes your working copy to run the specs'
|
@@ -9,7 +11,7 @@ task :bootstrap do
|
|
9
11
|
title 'Updating submodules'
|
10
12
|
sh 'git submodule update --init --recursive'
|
11
13
|
else
|
12
|
-
|
14
|
+
warn "\033[0;31m" \
|
13
15
|
"[!] Please install the bundler gem manually:\n" \
|
14
16
|
' $ [sudo] gem install bundler' \
|
15
17
|
"\e[0m"
|
@@ -95,7 +97,7 @@ begin
|
|
95
97
|
|
96
98
|
desc 'Runs RuboCop linter on Ruby files'
|
97
99
|
task :rubocop do
|
98
|
-
sh 'bundle exec rubocop
|
100
|
+
sh 'bundle exec rubocop'
|
99
101
|
end
|
100
102
|
|
101
103
|
#-- SourceKitten -----------------------------------------------------------#
|
@@ -103,10 +105,12 @@ begin
|
|
103
105
|
desc 'Vendors SourceKitten'
|
104
106
|
task :sourcekitten do
|
105
107
|
sk_dir = 'SourceKitten'
|
106
|
-
Dir.chdir(sk_dir) do
|
107
|
-
|
108
|
+
bin_path = Dir.chdir(sk_dir) do
|
109
|
+
build_cmd = 'swift build -c release --arch arm64 --arch x86_64'
|
110
|
+
`#{build_cmd}`
|
111
|
+
`#{build_cmd} --show-bin-path`.chomp
|
108
112
|
end
|
109
|
-
FileUtils.cp_r "#{
|
113
|
+
FileUtils.cp_r "#{bin_path}/sourcekitten", 'bin'
|
110
114
|
end
|
111
115
|
|
112
116
|
#-- Theme Dependencies -----------------------------------------------------#
|
@@ -115,20 +119,20 @@ begin
|
|
115
119
|
'jquery/dist/jquery.min.js' => [
|
116
120
|
'themes/apple/assets/js',
|
117
121
|
'themes/fullwidth/assets/js',
|
118
|
-
'themes/jony/assets/js'
|
122
|
+
'themes/jony/assets/js',
|
119
123
|
],
|
120
124
|
'lunr/lunr.min.js' => [
|
121
125
|
'themes/apple/assets/js',
|
122
|
-
'themes/fullwidth/assets/js'
|
126
|
+
'themes/fullwidth/assets/js',
|
123
127
|
],
|
124
128
|
'corejs-typeahead/dist/typeahead.jquery.js' => [
|
125
129
|
'themes/apple/assets/js',
|
126
|
-
'themes/fullwidth/assets/js'
|
130
|
+
'themes/fullwidth/assets/js',
|
127
131
|
],
|
128
132
|
'katex/dist/katex.min.css' => ['extensions/katex/css'],
|
129
133
|
'katex/dist/fonts' => ['extensions/katex/css'],
|
130
|
-
'katex/dist/katex.min.js' => ['extensions/katex/js']
|
131
|
-
}
|
134
|
+
'katex/dist/katex.min.js' => ['extensions/katex/js'],
|
135
|
+
}.freeze
|
132
136
|
|
133
137
|
desc 'Copies theme dependencies (`npm update/install` by hand first)'
|
134
138
|
task :theme_deps do
|
@@ -138,15 +142,14 @@ begin
|
|
138
142
|
end
|
139
143
|
end
|
140
144
|
end
|
141
|
-
|
142
145
|
rescue LoadError, NameError => e
|
143
|
-
|
146
|
+
warn "\033[0;31m" \
|
144
147
|
'[!] Some Rake tasks haven been disabled because the environment' \
|
145
148
|
' couldn’t be loaded. Be sure to run `rake bootstrap` first.' \
|
146
149
|
"\e[0m"
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
+
warn e.message
|
151
|
+
warn e.backtrace
|
152
|
+
warn ''
|
150
153
|
end
|
151
154
|
|
152
155
|
#-- Helpers ------------------------------------------------------------------#
|
data/bin/jazzy
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
if $PROGRAM_NAME == __FILE__ && !ENV['JAZZY_NO_BUNDLER']
|
4
|
-
ENV['BUNDLE_GEMFILE'] = File.expand_path('
|
5
|
+
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', __dir__)
|
5
6
|
require 'rubygems'
|
6
7
|
require 'bundler/setup'
|
7
|
-
$LOAD_PATH.unshift File.expand_path('
|
8
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __dir__)
|
8
9
|
elsif ENV['JAZZY_NO_BUNDLER']
|
9
10
|
require 'rubygems'
|
10
11
|
gem 'jazzy'
|
data/bin/sourcekitten
CHANGED
Binary file
|
data/jazzy.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require File.expand_path('lib/jazzy/gem_version.rb', File.dirname(__FILE__))
|
4
5
|
|
@@ -9,25 +10,27 @@ Gem::Specification.new do |spec|
|
|
9
10
|
spec.email = ['jp@jpsim.com']
|
10
11
|
spec.summary = 'Soulful docs for Swift & Objective-C.'
|
11
12
|
spec.description = 'Soulful docs for Swift & Objective-C. ' \
|
12
|
-
|
13
|
-
|
13
|
+
"Run in your SPM or Xcode project's root directory for " \
|
14
|
+
'instant HTML docs.'
|
14
15
|
spec.homepage = 'https://github.com/realm/jazzy'
|
15
16
|
spec.license = 'MIT'
|
16
17
|
|
17
18
|
spec.files = `git ls-files`.split($/)
|
18
|
-
spec.executables
|
19
|
+
spec.executables << 'jazzy'
|
19
20
|
|
20
21
|
spec.add_runtime_dependency 'cocoapods', '~> 1.5'
|
21
22
|
spec.add_runtime_dependency 'mustache', '~> 1.1'
|
22
|
-
spec.add_runtime_dependency 'open4'
|
23
|
+
spec.add_runtime_dependency 'open4', '~> 1.3'
|
23
24
|
spec.add_runtime_dependency 'redcarpet', '~> 3.4'
|
25
|
+
spec.add_runtime_dependency 'rexml', '~> 3.2'
|
24
26
|
spec.add_runtime_dependency 'rouge', ['>= 2.0.6', '< 4.0']
|
25
27
|
spec.add_runtime_dependency 'sassc', '~> 2.1'
|
26
28
|
spec.add_runtime_dependency 'sqlite3', '~> 1.3'
|
27
29
|
spec.add_runtime_dependency 'xcinvoke', '~> 0.3.0'
|
28
30
|
|
29
|
-
spec.add_development_dependency 'bundler', '~> 1
|
31
|
+
spec.add_development_dependency 'bundler', '~> 2.1'
|
30
32
|
spec.add_development_dependency 'rake', '~> 13.0'
|
31
33
|
|
32
|
-
spec.required_ruby_version = '>= 2.
|
34
|
+
spec.required_ruby_version = '>= 2.6.3'
|
35
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
33
36
|
end
|
data/lib/jazzy/config.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'optparse'
|
2
4
|
require 'pathname'
|
3
5
|
require 'uri'
|
@@ -8,7 +10,7 @@ require 'jazzy/source_declaration/access_control_level'
|
|
8
10
|
module Jazzy
|
9
11
|
# rubocop:disable Metrics/ClassLength
|
10
12
|
class Config
|
11
|
-
# rubocop:disable
|
13
|
+
# rubocop:disable Naming/AccessorMethodName
|
12
14
|
class Attribute
|
13
15
|
attr_reader :name, :description, :command_line, :config_file_key,
|
14
16
|
:default, :parse
|
@@ -50,6 +52,7 @@ module Jazzy
|
|
50
52
|
|
51
53
|
def attach_to_option_parser(config, opt)
|
52
54
|
return if command_line.empty?
|
55
|
+
|
53
56
|
opt.on(*command_line, *description) do |val|
|
54
57
|
set(config, val)
|
55
58
|
end
|
@@ -70,11 +73,12 @@ module Jazzy
|
|
70
73
|
end
|
71
74
|
end
|
72
75
|
end
|
73
|
-
# rubocop:enable
|
76
|
+
# rubocop:enable Naming/AccessorMethodName
|
74
77
|
|
75
78
|
def self.config_attr(name, **opts)
|
76
79
|
attr_accessor name
|
77
80
|
attr_accessor "#{name}_configured"
|
81
|
+
|
78
82
|
@all_config_attrs ||= []
|
79
83
|
@all_config_attrs << Attribute.new(name, **opts)
|
80
84
|
end
|
@@ -112,7 +116,7 @@ module Jazzy
|
|
112
116
|
|
113
117
|
# ──────── Build ────────
|
114
118
|
|
115
|
-
# rubocop:disable Layout/
|
119
|
+
# rubocop:disable Layout/ArgumentAlignment
|
116
120
|
|
117
121
|
config_attr :output,
|
118
122
|
description: 'Folder to output the HTML docs to',
|
@@ -124,7 +128,7 @@ module Jazzy
|
|
124
128
|
command_line: ['-c', '--[no-]clean'],
|
125
129
|
description: ['Delete contents of output directory before running. ',
|
126
130
|
'WARNING: If --output is set to ~/Desktop, this will '\
|
127
|
-
|
131
|
+
'delete the ~/Desktop directory.'],
|
128
132
|
default: false
|
129
133
|
|
130
134
|
config_attr :objc_mode,
|
@@ -150,10 +154,10 @@ module Jazzy
|
|
150
154
|
config_attr :hide_declarations,
|
151
155
|
command_line: '--hide-declarations [objc|swift] ',
|
152
156
|
description: 'Hide declarations in the specified language. Given that ' \
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
+
'generating Swift docs only generates Swift declarations, ' \
|
158
|
+
'this is useful for hiding a specific interface for ' \
|
159
|
+
'either Objective-C or mixed Objective-C and Swift ' \
|
160
|
+
'projects.',
|
157
161
|
default: ''
|
158
162
|
|
159
163
|
config_attr :keep_property_attributes,
|
@@ -170,7 +174,7 @@ module Jazzy
|
|
170
174
|
config_attr :build_tool_arguments,
|
171
175
|
command_line: ['-b', '--build-tool-arguments arg1,arg2,…argN', Array],
|
172
176
|
description: 'Arguments to forward to xcodebuild, swift build, or ' \
|
173
|
-
|
177
|
+
'sourcekitten.',
|
174
178
|
default: []
|
175
179
|
|
176
180
|
alias_config_attr :xcodebuild_arguments, :build_tool_arguments,
|
@@ -189,10 +193,16 @@ module Jazzy
|
|
189
193
|
default: Pathname.pwd,
|
190
194
|
parse: ->(sd) { expand_path(sd) }
|
191
195
|
|
196
|
+
config_attr :symbolgraph_directory,
|
197
|
+
command_line: '--symbolgraph-directory DIRPATH',
|
198
|
+
description: 'A directory containing a set of Swift Symbolgraph files ' \
|
199
|
+
'representing the module to be documented',
|
200
|
+
parse: ->(sd) { expand_path(sd) }
|
201
|
+
|
192
202
|
config_attr :excluded_files,
|
193
203
|
command_line: ['-e', '--exclude filepath1,filepath2,…filepathN', Array],
|
194
204
|
description: 'Source file pathnames to be excluded from documentation. '\
|
195
|
-
|
205
|
+
'Supports wildcards.',
|
196
206
|
default: [],
|
197
207
|
parse: ->(files) do
|
198
208
|
Array(files).map { |f| expand_glob_path(f).to_s }
|
@@ -201,7 +211,7 @@ module Jazzy
|
|
201
211
|
config_attr :included_files,
|
202
212
|
command_line: ['-i', '--include filepath1,filepath2,…filepathN', Array],
|
203
213
|
description: 'Source file pathnames to be included in documentation. '\
|
204
|
-
|
214
|
+
'Supports wildcards.',
|
205
215
|
default: [],
|
206
216
|
parse: ->(files) do
|
207
217
|
Array(files).map { |f| expand_glob_path(f).to_s }
|
@@ -213,8 +223,9 @@ module Jazzy
|
|
213
223
|
parse: ->(v) do
|
214
224
|
if v.to_s.empty?
|
215
225
|
nil
|
226
|
+
elsif v.to_f < 2
|
227
|
+
raise 'jazzy only supports Swift 2.0 or later.'
|
216
228
|
else
|
217
|
-
raise 'jazzy only supports Swift 2.0 or later.' if v.to_f < 2
|
218
229
|
v
|
219
230
|
end
|
220
231
|
end
|
@@ -224,13 +235,14 @@ module Jazzy
|
|
224
235
|
config_attr :swift_build_tool,
|
225
236
|
command_line: "--swift-build-tool #{SWIFT_BUILD_TOOLS.join(' | ')}",
|
226
237
|
description: 'Control whether Jazzy uses Swift Package Manager, '\
|
227
|
-
|
228
|
-
|
229
|
-
|
238
|
+
'xcodebuild, or swift-symbolgraph to build the module '\
|
239
|
+
'to be documented. By default it uses xcodebuild if '\
|
240
|
+
'there is a .xcodeproj file in the source directory.',
|
230
241
|
parse: ->(tool) do
|
231
242
|
return tool.to_sym if SWIFT_BUILD_TOOLS.include?(tool)
|
243
|
+
|
232
244
|
raise "Unsupported swift_build_tool #{tool}, "\
|
233
|
-
|
245
|
+
"supported values: #{SWIFT_BUILD_TOOLS.join(', ')}"
|
234
246
|
end
|
235
247
|
|
236
248
|
# ──────── Metadata ────────
|
@@ -254,13 +266,13 @@ module Jazzy
|
|
254
266
|
config_attr :version,
|
255
267
|
command_line: '--module-version VERSION',
|
256
268
|
description: 'Version string to use as part of the default docs '\
|
257
|
-
|
269
|
+
'title and inside the docset.',
|
258
270
|
default: '1.0'
|
259
271
|
|
260
272
|
config_attr :title,
|
261
273
|
command_line: '--title TITLE',
|
262
274
|
description: 'Title to display at the top of each page, overriding the '\
|
263
|
-
|
275
|
+
'default generated from module name and version.',
|
264
276
|
default: ''
|
265
277
|
|
266
278
|
config_attr :copyright,
|
@@ -285,16 +297,16 @@ module Jazzy
|
|
285
297
|
config_attr :podspec,
|
286
298
|
command_line: '--podspec FILEPATH',
|
287
299
|
description: 'A CocoaPods Podspec that describes the Swift library to '\
|
288
|
-
|
300
|
+
'document',
|
289
301
|
parse: ->(ps) { PodspecDocumenter.create_podspec(Pathname(ps)) if ps },
|
290
302
|
default: Dir['*.podspec{,.json}'].first
|
291
303
|
|
292
304
|
config_attr :pod_sources,
|
293
305
|
command_line: ['--pod-sources url1,url2,…urlN', Array],
|
294
306
|
description: 'A list of sources to find pod dependencies. Used only '\
|
295
|
-
|
296
|
-
|
297
|
-
|
307
|
+
'with --podspec when the podspec contains references to '\
|
308
|
+
'privately hosted pods. You must include the default pod '\
|
309
|
+
'source if public pods are also used.',
|
298
310
|
default: []
|
299
311
|
|
300
312
|
config_attr :docset_icon,
|
@@ -316,30 +328,56 @@ module Jazzy
|
|
316
328
|
config_attr :dash_url,
|
317
329
|
command_line: ['-d', '--dash_url URL'],
|
318
330
|
description: 'Location of the dash XML feed '\
|
319
|
-
|
331
|
+
'e.g. https://realm.io/docsets/realm.xml)',
|
320
332
|
parse: ->(d) { URI(d) }
|
321
333
|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
334
|
+
SOURCE_HOSTS = %w[github gitlab bitbucket].freeze
|
335
|
+
|
336
|
+
config_attr :source_host,
|
337
|
+
command_line: "--source-host #{SOURCE_HOSTS.join(' | ')}",
|
338
|
+
description: ['The source-code hosting site to be linked from documentation.',
|
339
|
+
'This setting affects the logo image and link format.',
|
340
|
+
"Default: 'github'"],
|
341
|
+
default: 'github',
|
342
|
+
parse: ->(host) do
|
343
|
+
return host.to_sym if SOURCE_HOSTS.include?(host)
|
344
|
+
|
345
|
+
raise "Unsupported source_host '#{host}', "\
|
346
|
+
"supported values: #{SOURCE_HOSTS.join(', ')}"
|
347
|
+
end
|
348
|
+
|
349
|
+
config_attr :source_host_url,
|
350
|
+
command_line: ['--source-host-url URL'],
|
351
|
+
description: ["URL to link from the source host's logo.",
|
352
|
+
'For example https://github.com/realm/realm-cocoa'],
|
326
353
|
parse: ->(g) { URI(g) }
|
327
354
|
|
328
|
-
|
355
|
+
alias_config_attr :github_url, :source_host_url,
|
356
|
+
command_line: ['-g', '--github_url URL'],
|
357
|
+
description: 'Back-compatibility alias for source_host_url.'
|
358
|
+
|
359
|
+
config_attr :source_host_files_url,
|
360
|
+
command_line: '--source-host-files-url PREFIX',
|
361
|
+
description: [
|
362
|
+
"The base URL on the source host of the project's files, to link "\
|
363
|
+
'from individual declarations.',
|
364
|
+
'For example https://github.com/realm/realm-cocoa/tree/v0.87.1',
|
365
|
+
]
|
366
|
+
|
367
|
+
alias_config_attr :github_file_prefix, :source_host_files_url,
|
329
368
|
command_line: '--github-file-prefix PREFIX',
|
330
|
-
description: '
|
331
|
-
'https://github.com/realm/realm-cocoa/tree/v0.87.1)'
|
369
|
+
description: 'Back-compatibility alias for source_host_files_url'
|
332
370
|
|
333
371
|
config_attr :docset_playground_url,
|
334
372
|
command_line: '--docset-playground-url URL',
|
335
373
|
description: 'URL of an interactive playground to demonstrate the '\
|
336
|
-
|
374
|
+
'framework, linked to from the docset.'
|
337
375
|
|
338
376
|
# ──────── Doc generation options ────────
|
339
377
|
config_attr :disable_search,
|
340
378
|
command_line: '--disable-search',
|
341
|
-
description:
|
342
|
-
|
379
|
+
description: 'Avoid generating a search index. '\
|
380
|
+
'Search is available in some themes.',
|
343
381
|
default: false
|
344
382
|
|
345
383
|
config_attr :skip_documentation,
|
@@ -359,7 +397,7 @@ module Jazzy
|
|
359
397
|
config_attr :skip_undocumented,
|
360
398
|
command_line: '--[no-]skip-undocumented',
|
361
399
|
description: "Don't document declarations that have no documentation "\
|
362
|
-
|
400
|
+
'comments.',
|
363
401
|
default: false
|
364
402
|
|
365
403
|
config_attr :hide_documentation_coverage,
|
@@ -368,22 +406,22 @@ module Jazzy
|
|
368
406
|
default: false
|
369
407
|
|
370
408
|
config_attr :custom_categories,
|
371
|
-
description:
|
372
|
-
|
373
|
-
|
374
|
-
|
409
|
+
description: 'Custom navigation categories to replace the standard '\
|
410
|
+
"'Classes', 'Protocols', etc. Types not explicitly named "\
|
411
|
+
'in a custom category appear in generic groups at the '\
|
412
|
+
'end. Example: https://git.io/v4Bcp',
|
375
413
|
default: []
|
376
414
|
|
377
415
|
config_attr :custom_categories_unlisted_prefix,
|
378
416
|
description: "Prefix for navigation section names that aren't "\
|
379
|
-
|
417
|
+
'explicitly listed in `custom_categories`.',
|
380
418
|
default: 'Other '
|
381
419
|
|
382
420
|
config_attr :hide_unlisted_documentation,
|
383
421
|
command_line: '--[no-]hide-unlisted-documentation',
|
384
422
|
description: "Don't include documentation in the sidebar from the "\
|
385
|
-
|
386
|
-
|
423
|
+
"`documentation` config value that aren't explicitly "\
|
424
|
+
'listed in `custom_categories`.',
|
387
425
|
default: false
|
388
426
|
|
389
427
|
config_attr :custom_head,
|
@@ -391,15 +429,15 @@ module Jazzy
|
|
391
429
|
description: 'Custom HTML to inject into <head></head>.',
|
392
430
|
default: ''
|
393
431
|
|
394
|
-
BUILTIN_THEME_DIR = Pathname(
|
432
|
+
BUILTIN_THEME_DIR = Pathname(__dir__) + 'themes'
|
395
433
|
BUILTIN_THEMES = BUILTIN_THEME_DIR.children(false).map(&:to_s)
|
396
434
|
|
397
435
|
config_attr :theme_directory,
|
398
436
|
command_line: "--theme [#{BUILTIN_THEMES.join(' | ')} | DIRPATH]",
|
399
437
|
description: "Which theme to use. Specify either 'apple' (default), "\
|
400
|
-
|
401
|
-
|
402
|
-
|
438
|
+
'one of the other built-in theme names, or the path to '\
|
439
|
+
'your mustache templates and other assets for a custom '\
|
440
|
+
'theme.',
|
403
441
|
default: 'apple',
|
404
442
|
parse: ->(t) do
|
405
443
|
if BUILTIN_THEMES.include?(t)
|
@@ -412,9 +450,9 @@ module Jazzy
|
|
412
450
|
config_attr :use_safe_filenames,
|
413
451
|
command_line: '--use-safe-filenames',
|
414
452
|
description: 'Replace unsafe characters in filenames with an encoded '\
|
415
|
-
|
416
|
-
|
417
|
-
|
453
|
+
'representation. This will reduce human readability of '\
|
454
|
+
'some URLs, but may be necessary for projects that '\
|
455
|
+
'expose filename-unfriendly functions such as /(_:_:)',
|
418
456
|
default: false
|
419
457
|
|
420
458
|
config_attr :template_directory,
|
@@ -434,17 +472,23 @@ module Jazzy
|
|
434
472
|
config_attr :undocumented_text,
|
435
473
|
command_line: '--undocumented-text UNDOCUMENTED_TEXT',
|
436
474
|
description: 'Default text for undocumented symbols. The default '\
|
437
|
-
|
475
|
+
'is "Undocumented", put "" if no text is required',
|
438
476
|
default: 'Undocumented'
|
439
477
|
|
440
478
|
config_attr :separate_global_declarations,
|
441
479
|
command_line: '--[no-]separate-global-declarations',
|
442
480
|
description: 'Create separate pages for all global declarations '\
|
443
|
-
|
444
|
-
|
481
|
+
"(classes, structures, enums etc.) even if they don't "\
|
482
|
+
'have children.',
|
483
|
+
default: false
|
484
|
+
|
485
|
+
config_attr :include_spi_declarations,
|
486
|
+
command_line: '--[no-]include-spi-declarations',
|
487
|
+
description: 'Include Swift declarations marked `@_spi` even if '\
|
488
|
+
'--min-acl is set to `public` or `open`.',
|
445
489
|
default: false
|
446
490
|
|
447
|
-
# rubocop:enable
|
491
|
+
# rubocop:enable Layout/ArgumentAlignment
|
448
492
|
|
449
493
|
def initialize
|
450
494
|
self.class.all_config_attrs.each do |attr|
|
@@ -457,7 +501,6 @@ module Jazzy
|
|
457
501
|
Doc.template_path = theme_directory + 'templates'
|
458
502
|
end
|
459
503
|
|
460
|
-
# rubocop:disable Metrics/MethodLength
|
461
504
|
def self.parse!
|
462
505
|
config = new
|
463
506
|
config.parse_command_line
|
@@ -471,9 +514,16 @@ module Jazzy
|
|
471
514
|
)
|
472
515
|
end
|
473
516
|
|
517
|
+
config.validate
|
518
|
+
|
474
519
|
config
|
475
520
|
end
|
476
521
|
|
522
|
+
def warning(message)
|
523
|
+
warn "WARNING: #{message}"
|
524
|
+
end
|
525
|
+
|
526
|
+
# rubocop:disable Metrics/MethodLength
|
477
527
|
def parse_command_line
|
478
528
|
OptionParser.new do |opt|
|
479
529
|
opt.banner = 'Usage: jazzy'
|
@@ -485,7 +535,7 @@ module Jazzy
|
|
485
535
|
end
|
486
536
|
|
487
537
|
opt.on('-v', '--version', 'Print version number') do
|
488
|
-
puts
|
538
|
+
puts "jazzy version: #{Jazzy::VERSION}"
|
489
539
|
exit
|
490
540
|
end
|
491
541
|
|
@@ -504,6 +554,10 @@ module Jazzy
|
|
504
554
|
exit
|
505
555
|
end
|
506
556
|
end.parse!
|
557
|
+
|
558
|
+
unless ARGV.empty?
|
559
|
+
warning "Leftover unused command-line text: #{ARGV}"
|
560
|
+
end
|
507
561
|
end
|
508
562
|
|
509
563
|
def parse_config_file
|
@@ -521,13 +575,12 @@ module Jazzy
|
|
521
575
|
|
522
576
|
config_file.each do |key, value|
|
523
577
|
unless attr = attrs_by_conf_key[key]
|
524
|
-
message = "
|
578
|
+
message = "Unknown config file attribute #{key.inspect}"
|
525
579
|
if matching_name = attrs_by_name[key]
|
526
|
-
message
|
527
|
-
|
528
|
-
message << '?)'
|
580
|
+
message +=
|
581
|
+
" (Did you mean #{matching_name.first.config_file_key.inspect}?)"
|
529
582
|
end
|
530
|
-
|
583
|
+
warning message
|
531
584
|
next
|
532
585
|
end
|
533
586
|
|
@@ -537,6 +590,24 @@ module Jazzy
|
|
537
590
|
self.base_path = nil
|
538
591
|
end
|
539
592
|
|
593
|
+
def validate
|
594
|
+
if source_host_configured &&
|
595
|
+
source_host_url.nil? &&
|
596
|
+
source_host_files_url.nil?
|
597
|
+
warning 'Option `source_host` is set but has no effect without either '\
|
598
|
+
'`source_host_url` or `source_host_files_url`.'
|
599
|
+
end
|
600
|
+
|
601
|
+
if objc_mode &&
|
602
|
+
build_tool_arguments_configured &&
|
603
|
+
(framework_root_configured || umbrella_header_configured)
|
604
|
+
warning 'Option `build_tool_arguments` is set: values passed to '\
|
605
|
+
'`framework_root` or `umbrella_header` may be ignored.'
|
606
|
+
end
|
607
|
+
end
|
608
|
+
|
609
|
+
# rubocop:enable Metrics/MethodLength
|
610
|
+
|
540
611
|
def locate_config_file
|
541
612
|
return config_file if config_file
|
542
613
|
|
@@ -550,15 +621,10 @@ module Jazzy
|
|
550
621
|
|
551
622
|
def read_config_file(file)
|
552
623
|
case File.extname(file)
|
553
|
-
when '.json'
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
else
|
558
|
-
# rubocop:disable Security/YAMLLoad
|
559
|
-
YAML.load(File.read(file))
|
560
|
-
# rubocop:enable Security/YAMLLoad
|
561
|
-
end
|
624
|
+
when '.json'
|
625
|
+
JSON.parse(File.read(file))
|
626
|
+
when '.yaml', '.yml'
|
627
|
+
YAML.safe_load(File.read(file))
|
562
628
|
else raise "Config file must be .yaml or .json, but got #{file.inspect}"
|
563
629
|
end
|
564
630
|
end
|
@@ -575,7 +641,7 @@ module Jazzy
|
|
575
641
|
|
576
642
|
The config file can be in YAML or JSON format. Available options are:
|
577
643
|
|
578
|
-
|
644
|
+
_EOS_
|
579
645
|
.gsub(/^ +/, '')
|
580
646
|
|
581
647
|
print_option_help
|
data/lib/jazzy/doc.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'date'
|
2
4
|
require 'pathname'
|
3
5
|
require 'mustache'
|
@@ -18,7 +20,7 @@ module Jazzy
|
|
18
20
|
date = ENV['JAZZY_FAKE_DATE'] || DateTime.now.strftime('%Y-%m-%d')
|
19
21
|
year = date[0..3]
|
20
22
|
"© #{year} [#{config.author_name}](#{config.author_url}). " \
|
21
|
-
|
23
|
+
"All rights reserved. (Last updated: #{date})"
|
22
24
|
)
|
23
25
|
Markdown.render_copyright(copyright).chomp
|
24
26
|
end
|