jazzy 0.3.2 → 0.4.0

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.
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',