jazzy 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +27 -0
  3. data/.travis.yml +2 -2
  4. data/CHANGELOG.md +41 -0
  5. data/Gemfile.lock +10 -12
  6. data/README.md +80 -14
  7. data/Rakefile +1 -3
  8. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/SourceKittenFramework +0 -0
  9. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Commandant.framework/Commandant +0 -0
  10. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Commandant.framework/Versions/A/Commandant +0 -0
  11. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Commandant.framework/Versions/A/Resources/Info.plist +5 -5
  12. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Result.framework/Result +0 -0
  13. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Result.framework/Versions/A/Resources/Info.plist +4 -4
  14. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/Result.framework/Versions/A/Result +0 -0
  15. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/SWXMLHash +0 -0
  16. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/Versions/A/Resources/Info.plist +4 -4
  17. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/Versions/A/SWXMLHash +0 -0
  18. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/SwiftXPC.framework/SwiftXPC +0 -0
  19. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/SwiftXPC.framework/Versions/A/Resources/Info.plist +5 -5
  20. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/SwiftXPC.framework/Versions/A/SwiftXPC +0 -0
  21. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/libswiftCore.dylib +0 -0
  22. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/libswiftCoreGraphics.dylib +0 -0
  23. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/libswiftDarwin.dylib +0 -0
  24. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/libswiftDispatch.dylib +0 -0
  25. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/libswiftFoundation.dylib +0 -0
  26. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Frameworks/libswiftObjectiveC.dylib +0 -0
  27. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/Resources/Info.plist +5 -5
  28. data/lib/jazzy/SourceKitten/Frameworks/SourceKittenFramework.framework/Versions/A/SourceKittenFramework +0 -0
  29. data/lib/jazzy/SourceKitten/bin/sourcekitten +0 -0
  30. data/lib/jazzy/assets/css/jazzy.css.scss +39 -14
  31. data/lib/jazzy/config.rb +342 -182
  32. data/lib/jazzy/doc.rb +8 -19
  33. data/lib/jazzy/doc_builder.rb +38 -26
  34. data/lib/jazzy/docset_builder.rb +4 -3
  35. data/lib/jazzy/executable.rb +2 -1
  36. data/lib/jazzy/gem_version.rb +1 -1
  37. data/lib/jazzy/jazzy_markdown.rb +16 -4
  38. data/lib/jazzy/podspec_documenter.rb +25 -11
  39. data/lib/jazzy/readme_generator.rb +7 -7
  40. data/lib/jazzy/source_declaration.rb +2 -0
  41. data/lib/jazzy/source_declaration/access_control_level.rb +21 -15
  42. data/lib/jazzy/source_declaration/type.rb +79 -5
  43. data/lib/jazzy/sourcekitten.rb +150 -24
  44. data/lib/jazzy/templates/doc.mustache +2 -2
  45. data/lib/jazzy/templates/nav.mustache +1 -1
  46. data/lib/jazzy/templates/task.mustache +26 -10
  47. data/spec/integration_spec.rb +34 -39
  48. metadata +2 -2
@@ -10,25 +10,6 @@ module Jazzy
10
10
  class Doc < Mustache
11
11
  self.template_name = 'doc'
12
12
 
13
- ############################################################################
14
- # TODO: Remove shortly (kept for backwards compatibility)
15
- #
16
- def date
17
- # Fake date is used to keep integration tests consistent
18
- ENV['JAZZY_FAKE_DATE'] || DateTime.now.strftime('%Y-%m-%d')
19
- end
20
-
21
- def year
22
- # Fake date is used to keep integration tests consistent
23
- if ENV['JAZZY_FAKE_DATE']
24
- ENV['JAZZY_FAKE_DATE'][0..3]
25
- else
26
- DateTime.now.strftime('%Y')
27
- end
28
- end
29
- #
30
- ############################################################################
31
-
32
13
  def copyright
33
14
  config = Config.instance
34
15
  copyright = config.copyright || (
@@ -45,5 +26,13 @@ module Jazzy
45
26
  # Fake version is used to keep integration tests consistent
46
27
  ENV['JAZZY_FAKE_VERSION'] || Jazzy::VERSION
47
28
  end
29
+
30
+ def language
31
+ Config.instance.objc_mode ? 'Objective-C' : 'Swift'
32
+ end
33
+
34
+ def language_stub
35
+ Config.instance.objc_mode ? 'objc' : 'swift'
36
+ end
48
37
  end
49
38
  end
@@ -29,14 +29,15 @@ module Jazzy
29
29
  # section names & child names & URLs
30
30
  def self.doc_structure_for_docs(docs)
31
31
  docs.map do |doc|
32
+ children = doc.children
33
+ .sort_by(&:name)
34
+ .sort_by(&:nav_order)
35
+ .map do |child|
36
+ { name: child.name, url: child.url }
37
+ end
32
38
  {
33
39
  section: doc.name,
34
- children: doc.children
35
- .sort_by(&:name)
36
- .sort_by(&:nav_order)
37
- .map do |child|
38
- { name: child.name, url: child.url }
39
- end,
40
+ children: children,
40
41
  }
41
42
  end
42
43
  end
@@ -48,8 +49,8 @@ module Jazzy
48
49
  if options.sourcekitten_sourcefile
49
50
  stdout = options.sourcekitten_sourcefile.read
50
51
  else
51
- if podspec = options.podspec
52
- stdout = PodspecDocumenter.new(podspec).sourcekitten_output
52
+ if options.podspec_configured
53
+ stdout = PodspecDocumenter.new(options.podspec).sourcekitten_output
53
54
  else
54
55
  stdout = Dir.chdir(options.source_directory) do
55
56
  arguments = SourceKitten.arguments_from_options(options)
@@ -128,11 +129,21 @@ module Jazzy
128
129
 
129
130
  DocsetBuilder.new(output_dir, source_module).build!
130
131
 
131
- puts "jam out ♪♫ to your fresh new docs in `#{output_dir}`"
132
+ friendly_path = relative_path_if_inside(output_dir, Pathname.pwd)
133
+ puts "jam out ♪♫ to your fresh new docs in `#{friendly_path}`"
132
134
 
133
135
  source_module
134
136
  end
135
137
 
138
+ def self.relative_path_if_inside(path, base_path)
139
+ relative = path.relative_path_from(base_path)
140
+ if relative.to_path =~ %r{/^..(\/|$)/}
141
+ path
142
+ else
143
+ relative
144
+ end
145
+ end
146
+
136
147
  def self.decl_for_token(token)
137
148
  if token['key.parsed_declaration']
138
149
  token['key.parsed_declaration']
@@ -188,8 +199,6 @@ module Jazzy
188
199
  doc[:structure] = source_module.doc_structure
189
200
  doc[:module_name] = source_module.name
190
201
  doc[:author_name] = source_module.author_name
191
- # TODO: Remove shortly (kept for backwards compatibility)
192
- doc[:author_website] = source_module.author_url
193
202
  doc[:github_url] = source_module.github_url
194
203
  doc[:dash_url] = source_module.dash_url
195
204
  doc[:path_to_root] = path_to_root
@@ -226,22 +235,27 @@ module Jazzy
226
235
  # Combine abstract and discussion into abstract
227
236
  abstract = (item.abstract || '') + (item.discussion || '')
228
237
  item_render = {
229
- name: item.name,
230
- abstract: Jazzy.markdown.render(abstract),
231
- declaration: item.declaration,
232
- usr: item.usr,
233
- dash_type: item.type.dash_type,
238
+ name: item.name,
239
+ abstract: render_markdown(abstract),
240
+ declaration: item.declaration,
241
+ usr: item.usr,
242
+ dash_type: item.type.dash_type,
243
+ github_token_url: gh_token_url(item, source_module),
244
+ default_impl_abstract: render_markdown(item.default_impl_abstract),
245
+ from_protocol_extension: item.from_protocol_extension,
246
+ return: render_markdown(item.return),
247
+ parameters: (item.parameters if item.parameters.any?),
248
+ url: (item.url if item.children.any?),
249
+ start_line: item.start_line,
250
+ end_line: item.end_line,
234
251
  }
235
- gh_token_url = gh_token_url(item, source_module)
236
- item_render[:github_token_url] = gh_token_url
237
- item_render[:return] = Jazzy.markdown.render(item.return) if item.return
238
- item_render[:parameters] = item.parameters if item.parameters.any?
239
- item_render[:url] = item.url if item.children.any?
240
- item_render[:start_line] = item.start_line
241
- item_render[:end_line] = item.end_line
242
252
  item_render.reject { |_, v| v.nil? }
243
253
  end
244
254
 
255
+ def self.render_markdown(markdown)
256
+ Jazzy.markdown.render(markdown) if markdown
257
+ end
258
+
245
259
  def self.make_task(mark, uid, items)
246
260
  {
247
261
  name: mark.name,
@@ -295,12 +309,10 @@ module Jazzy
295
309
  doc[:tasks] = render_tasks(source_module, doc_model.children)
296
310
  doc[:module_name] = source_module.name
297
311
  doc[:author_name] = source_module.author_name
298
- # TODO: Remove shortly (kept for backwards compatibility)
299
- doc[:author_website] = source_module.author_url.to_s
300
312
  doc[:github_url] = source_module.github_url
301
313
  doc[:dash_url] = source_module.dash_url
302
314
  doc[:path_to_root] = path_to_root
303
- doc.render
315
+ doc.render.gsub(ELIDED_AUTOLINK_TOKEN, path_to_root)
304
316
  end
305
317
  end
306
318
  end
@@ -15,8 +15,9 @@ module Jazzy
15
15
 
16
16
  def initialize(generated_docs_dir, source_module)
17
17
  @source_module = source_module
18
- @docset_dir = generated_docs_dir +
19
- (config.docset_path || "docsets/#{source_module.name}.docset")
18
+ docset_path = config.docset_path ||
19
+ "docsets/#{source_module.name}.docset"
20
+ @docset_dir = generated_docs_dir + docset_path
20
21
  @generated_docs_dir = generated_docs_dir
21
22
  @output_dir = docset_dir.parent
22
23
  @documents_dir = docset_dir + 'Contents/Resources/Documents/'
@@ -59,7 +60,7 @@ module Jazzy
59
60
 
60
61
  def copy_docs
61
62
  files_to_copy = Pathname.glob(generated_docs_dir + '*') -
62
- [docset_dir, output_dir]
63
+ [docset_dir, output_dir]
63
64
 
64
65
  FileUtils.mkdir_p documents_dir
65
66
  FileUtils.cp_r files_to_copy, documents_dir
@@ -24,7 +24,8 @@ module Jazzy
24
24
 
25
25
  require 'open4'
26
26
 
27
- stdout, stderr = IO.new, IO.new($stderr)
27
+ stdout = IO.new
28
+ stderr = IO.new($stderr)
28
29
 
29
30
  options = { stdout: stdout, stderr: stderr, status: true }
30
31
  status = Open4.spawn(env, bin, *args, options)
@@ -1,3 +1,3 @@
1
1
  module Jazzy
2
- VERSION = '0.3.2' unless defined? Jazzy::VERSION
2
+ VERSION = '0.4.0' unless defined? Jazzy::VERSION
3
3
  end
@@ -9,9 +9,9 @@ module Jazzy
9
9
 
10
10
  def header(text, header_level)
11
11
  text_slug = text.gsub(/[^a-zA-Z0-9]+/, '_')
12
- .downcase
13
- .sub(/^_/, '')
14
- .sub(/_$/, '')
12
+ .downcase
13
+ .sub(/^_/, '')
14
+ .sub(/_$/, '')
15
15
 
16
16
  "<a href='##{text_slug}' class='anchor' aria-hidden=true>" \
17
17
  '<span class="header-anchor"></span>' \
@@ -57,15 +57,27 @@ module Jazzy
57
57
  ELIDED_LI_TOKEN = '7wNVzLB0OYPL2eGlPKu8q4vITltqh0Y6DPZf659TPMAeYh49o'.freeze
58
58
 
59
59
  def list_item(text, _list_type)
60
- return ELIDED_LI_TOKEN if text =~ SPECIAL_LIST_TYPE_REGEX
60
+ if text =~ SPECIAL_LIST_TYPE_REGEX
61
+ type = Regexp.last_match(2)
62
+ return ELIDED_LI_TOKEN if type =~ /parameter|returns/
63
+ return render_aside(type, text.sub(/#{Regexp.escape(type)}:\s+/, ''))
64
+ end
61
65
  str = '<li>'
62
66
  str << text.strip
63
67
  str << "</li>\n"
64
68
  end
65
69
 
70
+ def render_aside(type, text)
71
+ %(<div class="aside aside-#{type.underscore.tr('_', '-')}">
72
+ <p class="aside-title">#{type.underscore.humanize}</p>
73
+ #{text}
74
+ </div>)
75
+ end
76
+
66
77
  def list(text, list_type)
67
78
  elided = text.gsub!(ELIDED_LI_TOKEN, '')
68
79
  return if text =~ /\A\s*\Z/ && elided
80
+ return text if text =~ /class="aside-title"/
69
81
  str = "\n"
70
82
  str << (list_type == :ordered ? "<ol>\n" : "<ul>\n")
71
83
  str << text
@@ -23,23 +23,37 @@ module Jazzy
23
23
  stdout.reduce([]) { |a, s| a + JSON.load(s) }.to_json
24
24
  end
25
25
 
26
- def self.configure(config, podspec)
27
- case podspec
26
+ def self.create_podspec(podspec_path)
27
+ case podspec_path
28
28
  when Pathname, String
29
29
  require 'cocoapods'
30
- podspec = Pod::Specification.from_file(podspec)
30
+ Pod::Specification.from_file(podspec_path)
31
31
  end
32
+ end
32
33
 
34
+ # rubocop:disable Metrics/CyclomaticComplexity
35
+ # rubocop:disable Metrics/PerceivedComplexity
36
+ def self.apply_config_defaults(podspec, config)
33
37
  return unless podspec
34
38
 
35
- config.author_name = author_name(podspec)
36
- config.module_name = podspec.module_name
37
- config.author_url = podspec.homepage || github_file_prefix(podspec)
38
- config.version = podspec.version.to_s
39
- config.github_file_prefix = github_file_prefix(podspec)
40
-
41
- podspec
39
+ unless config.author_name_configured
40
+ config.author_name = author_name(podspec)
41
+ end
42
+ unless config.module_name_configured
43
+ config.module_name = podspec.module_name
44
+ end
45
+ unless config.author_url_configured
46
+ config.author_url = podspec.homepage || github_file_prefix(podspec)
47
+ end
48
+ unless config.version_configured
49
+ config.version = podspec.version.to_s
50
+ end
51
+ unless config.github_file_prefix_configured
52
+ config.github_file_prefix = github_file_prefix(podspec)
53
+ end
42
54
  end
55
+ # rubocop:enable Metrics/CyclomaticComplexity
56
+ # rubocop:enable Metrics/PerceivedComplexity
43
57
 
44
58
  private
45
59
 
@@ -95,7 +109,7 @@ module Jazzy
95
109
  platform :ios, '8.0'
96
110
  [podspec, *podspec.recursive_subspecs].each do |ss|
97
111
  ss.available_platforms.each do |p|
98
- t = "Jazzy-#{ss.name.gsub(/\//, '__')}-#{p.name}"
112
+ t = "Jazzy-#{ss.name.gsub('/', '__')}-#{p.name}"
99
113
  targets << "Pods-#{t}-#{ss.root.name}"
100
114
  target(t) do
101
115
  use_frameworks!
@@ -31,29 +31,29 @@ module Jazzy
31
31
 
32
32
  # <a href="#{license[:url]}">#{license[:license]}</a>
33
33
  <<-EOS
34
- # #{ podspec.name }
34
+ # #{podspec.name}
35
35
 
36
- ### #{podspec.summary }
36
+ ### #{podspec.summary}
37
37
 
38
- #{ podspec.description }
38
+ #{podspec.description}
39
39
 
40
40
  ### Installation
41
41
 
42
42
  ```ruby
43
- pod '#{ podspec.name }'
43
+ pod '#{podspec.name}'
44
44
  ```
45
45
 
46
46
  ### Authors
47
47
 
48
- #{ source_module.author_name }
48
+ #{source_module.author_name}
49
49
  EOS
50
50
  else
51
51
  <<-EOS
52
- # #{ source_module.name }
52
+ # #{source_module.name}
53
53
 
54
54
  ### Authors
55
55
 
56
- #{ source_module.author_name }
56
+ #{source_module.author_name}
57
57
  EOS
58
58
  end
59
59
  end
@@ -14,6 +14,8 @@ module Jazzy
14
14
  attr_accessor :name
15
15
  attr_accessor :declaration
16
16
  attr_accessor :abstract
17
+ attr_accessor :default_impl_abstract
18
+ attr_accessor :from_protocol_extension
17
19
  attr_accessor :discussion
18
20
  attr_accessor :return
19
21
  attr_accessor :children
@@ -10,15 +10,14 @@ module Jazzy
10
10
  ACCESSIBILITY_PUBLIC = 'source.lang.swift.accessibility.public'
11
11
 
12
12
  def initialize(accessibility)
13
- if accessibility == ACCESSIBILITY_PRIVATE
14
- @level = :private
15
- elsif accessibility == ACCESSIBILITY_INTERNAL
16
- @level = :internal
17
- elsif accessibility == ACCESSIBILITY_PUBLIC
18
- @level = :public
19
- else
20
- raise "cannot initialize AccessControlLevel with '#{accessibility}'"
21
- end
13
+ @level = case accessibility
14
+ when ACCESSIBILITY_PRIVATE then :private
15
+ when ACCESSIBILITY_INTERNAL then :internal
16
+ when ACCESSIBILITY_PUBLIC then :public
17
+ else
18
+ raise 'cannot initialize AccessControlLevel with ' \
19
+ "'#{accessibility}'"
20
+ end
22
21
  end
23
22
 
24
23
  def self.from_doc(doc)
@@ -34,12 +33,19 @@ module Jazzy
34
33
  end
35
34
 
36
35
  def self.from_explicit_declaration(declaration_string)
37
- if declaration_string =~ /private\ /
38
- return AccessControlLevel.private
39
- elsif declaration_string =~ /public\ /
40
- return AccessControlLevel.public
41
- elsif declaration_string =~ /internal\ /
42
- return AccessControlLevel.internal
36
+ case declaration_string
37
+ when /private\ / then private
38
+ when /public\ / then public
39
+ when /internal\ / then internal
40
+ end
41
+ end
42
+
43
+ def self.from_human_string(string)
44
+ case string.to_s.downcase
45
+ when 'private' then private
46
+ when 'internal' then internal
47
+ when 'public' then public
48
+ else raise "cannot initialize AccessControlLevel with '#{string}'"
43
49
  end
44
50
  end
45
51
 
@@ -28,14 +28,23 @@ module Jazzy
28
28
  end
29
29
 
30
30
  def mark?
31
- kind == 'source.lang.swift.syntaxtype.comment.mark'
31
+ kind == 'source.lang.swift.syntaxtype.comment.mark' ||
32
+ kind == 'sourcekitten.source.lang.objc.mark'
32
33
  end
33
34
 
34
- def enum_case?
35
+ def objc_enum?
36
+ kind == 'sourcekitten.source.lang.objc.decl.enum'
37
+ end
38
+
39
+ def objc_typedef?
40
+ kind == 'sourcekitten.source.lang.objc.decl.typedef'
41
+ end
42
+
43
+ def swift_enum_case?
35
44
  kind == 'source.lang.swift.decl.enumcase'
36
45
  end
37
46
 
38
- def enum_element?
47
+ def swift_enum_element?
39
48
  kind == 'source.lang.swift.decl.enumelement'
40
49
  end
41
50
 
@@ -44,13 +53,22 @@ module Jazzy
44
53
  end
45
54
 
46
55
  def declaration?
47
- kind =~ /^source\.lang\.swift\.decl\..*/
56
+ kind.start_with?('source.lang.swift.decl') ||
57
+ kind.start_with?('sourcekitten.source.lang.objc.decl')
48
58
  end
49
59
 
50
- def extension?
60
+ def swift_extension?
51
61
  kind =~ /^source\.lang\.swift\.decl\.extension.*/
52
62
  end
53
63
 
64
+ def swift_extensible?
65
+ kind =~ /^source\.lang\.swift\.decl\.(class|struct|protocol|enum)$/
66
+ end
67
+
68
+ def swift_protocol?
69
+ kind == 'source.lang.swift.decl.protocol'
70
+ end
71
+
54
72
  def param?
55
73
  # SourceKit strangely categorizes initializer parameters as local
56
74
  # variables, so both kinds represent a parameter in jazzy.
@@ -72,6 +90,62 @@ module Jazzy
72
90
  end
73
91
 
74
92
  TYPES = {
93
+ # Objective-C
94
+
95
+ 'sourcekitten.source.lang.objc.decl.category' => {
96
+ jazzy: 'Category',
97
+ dash: 'Extension',
98
+ }.freeze,
99
+ 'sourcekitten.source.lang.objc.decl.class' => {
100
+ jazzy: 'Class',
101
+ dash: 'Class',
102
+ }.freeze,
103
+ 'sourcekitten.source.lang.objc.decl.constant' => {
104
+ jazzy: 'Constant',
105
+ dash: 'Constant',
106
+ }.freeze,
107
+ 'sourcekitten.source.lang.objc.decl.enum' => {
108
+ jazzy: 'Enum',
109
+ dash: 'Enum',
110
+ }.freeze,
111
+ 'sourcekitten.source.lang.objc.decl.enumcase' => {
112
+ jazzy: 'Enum Case',
113
+ dash: 'Case',
114
+ }.freeze,
115
+ 'sourcekitten.source.lang.objc.decl.initializer' => {
116
+ jazzy: 'Initializer',
117
+ dash: 'Initializer',
118
+ }.freeze,
119
+ 'sourcekitten.source.lang.objc.decl.method.class' => {
120
+ jazzy: 'Class Method',
121
+ dash: 'Method',
122
+ }.freeze,
123
+ 'sourcekitten.source.lang.objc.decl.method.instance' => {
124
+ jazzy: 'Instance Method',
125
+ dash: 'Method',
126
+ }.freeze,
127
+ 'sourcekitten.source.lang.objc.decl.property' => {
128
+ jazzy: 'Property',
129
+ dash: 'Property',
130
+ }.freeze,
131
+ 'sourcekitten.source.lang.objc.decl.protocol' => {
132
+ jazzy: 'Protocol',
133
+ dash: 'Protocol',
134
+ }.freeze,
135
+ 'sourcekitten.source.lang.objc.decl.typedef' => {
136
+ jazzy: 'Type Definition',
137
+ dash: 'Alias',
138
+ }.freeze,
139
+ 'sourcekitten.source.lang.objc.mark' => {
140
+ jazzy: 'Mark',
141
+ dash: 'Mark',
142
+ }.freeze,
143
+ 'sourcekitten.source.lang.objc.decl.function' => {
144
+ jazzy: 'Function',
145
+ dash: 'Function',
146
+ }.freeze,
147
+
148
+ # Swift
75
149
  'source.lang.swift.decl.function.accessor.address' => {
76
150
  jazzy: 'Address Accessor',
77
151
  dash: 'Function',