jazzy 0.11.2 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18e3f122c25c627bb60df82d02b4d788fd1b6bcf0d071eb94c047124fd7a353c
4
- data.tar.gz: 26add28c105c85d6ac3c139ac43b068e352cabfbb420c39efb142fbbcef0d662
3
+ metadata.gz: b8b0a6f32e8d7182725eafedb4ec488e382de192af903fb42ee9d7cd3c7396c3
4
+ data.tar.gz: 1b2dbf01dae14692d0a04a1912f71d98cc44d2397fe81280df0d072089b3ad4b
5
5
  SHA512:
6
- metadata.gz: debb129e3cfd568a467c3de5ef98832af900ca3a6307374f25dc94ad3d2fa5243889889b948c4fdc58214e20c74f8223cc5bf922632b7b87a4f71f6dcc28424b
7
- data.tar.gz: 5238864991bd821349a9ba76106004aed419675560d26628228a0b640810349a989176705ac1915fdd5d8be33f191b87ca98266fdb43cf7fbfe2be7ef1a7955f
6
+ metadata.gz: 04ef74edf753cb424bfe2b9f8bdc7860b3d9072e91a5be60a7db38981d705cc595286a33d805482129746b4ee6626ef5852cbbf13e428d0e0f7fcd99310adf14
7
+ data.tar.gz: 8b038aaabd0516983b87d80841e1dc490b35e6493cae241193d07b09c946f8f47dd0b7b84bd20300fd382d522ad6ca3104fb2478c9eb6ab764afb5a6840014b4
@@ -12,25 +12,16 @@ aliases:
12
12
  BUNDLE_RETRY: 3
13
13
  BUNDLE_PATH: vendor/bundle
14
14
 
15
- - &shell
16
- /bin/bash --login -eo pipefail
17
-
18
- - &set-ruby-version
19
- echo "ruby-2.4" > ~/.ruby-version
20
-
21
15
  version: 2
22
16
  jobs:
23
17
 
24
18
  swift:
25
19
  macos:
26
- xcode: "10.2.0"
20
+ xcode: "11.2.0"
27
21
  environment: *bundler-environment
28
- # Used to invoke chruby
29
- shell: *shell
30
22
  steps:
31
23
  - checkout
32
24
  - restore_cache: *restore-mac-bundler-cache
33
- - run: *set-ruby-version
34
25
  - run: bundle install
35
26
  - run: git submodule update --init --recursive
36
27
  - run: bundle exec rake swift_spec
@@ -38,14 +29,11 @@ jobs:
38
29
 
39
30
  objc:
40
31
  macos:
41
- xcode: "10.2.0"
32
+ xcode: "11.2.0"
42
33
  environment: *bundler-environment
43
- # Used to invoke chruby
44
- shell: *shell
45
34
  steps:
46
35
  - checkout
47
36
  - restore_cache: *restore-mac-bundler-cache
48
- - run: *set-ruby-version
49
37
  - run: bundle install
50
38
  - run: git submodule update --init --recursive
51
39
  - run: bundle exec rake objc_spec
@@ -53,16 +41,13 @@ jobs:
53
41
 
54
42
  cocoapods:
55
43
  macos:
56
- xcode: "10.2.0"
44
+ xcode: "11.2.0"
57
45
  environment: *bundler-environment
58
- # Used to invoke chruby
59
- shell: *shell
60
46
  steps:
61
47
  - checkout
62
48
  - restore_cache:
63
49
  key: cocoapods
64
50
  - restore_cache: *restore-mac-bundler-cache
65
- - run: *set-ruby-version
66
51
  - run: bundle install
67
52
  - run: git submodule update --init --recursive
68
53
  - run: bundle exec rake cocoapods_spec
@@ -76,8 +61,6 @@ jobs:
76
61
  docker:
77
62
  - image: circleci/ruby:2.4-node
78
63
  environment: *bundler-environment
79
- # Used to invoke chruby
80
- shell: *shell
81
64
  steps:
82
65
  - checkout
83
66
  - restore_cache:
@@ -1,3 +1,29 @@
1
+ ## 0.12.0
2
+
3
+ ##### Breaking
4
+
5
+ * None.
6
+
7
+ ##### Enhancements
8
+
9
+ * Support for mixed Swift-ObjC modules: generate two sets of SourceKitten
10
+ json and pass them on using `--sourcekitten-sourcefile`.
11
+ [Joe Susnick](https://github.com/joesus)
12
+ [John Fairhurst](https://github.com/johnfairh)
13
+ [#447](https://github.com/realm/jazzy/issues/447)
14
+
15
+ ##### Bug Fixes
16
+
17
+ * Stop displaying type attributes on extension declarations.
18
+ [John Fairhurst](https://github.com/johnfairh)
19
+
20
+ * Show ObjC and Swift classes (etc.) in the same category.
21
+ [John Fairhurst](https://github.com/johnfairh)
22
+
23
+ * Merge Swift extensions into ObjC classes.
24
+ [John Fairhurst](https://github.com/johnfairh)
25
+ [Joe Susnick](https://github.com/joesus)
26
+
1
27
  ## 0.11.2
2
28
 
3
29
  ##### Breaking
@@ -49,7 +49,7 @@ git push
49
49
  You'll need push access to the integration specs repo to do this. You can
50
50
  request access from one of the maintainers when filing your PR.
51
51
 
52
- You must have Xcode 10.2 installed to build the integration specs.
52
+ You must have Xcode 11.2 installed to build the integration specs.
53
53
 
54
54
  ## Making changes to SourceKitten
55
55
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jazzy (0.11.2)
4
+ jazzy (0.12.0)
5
5
  cocoapods (~> 1.5)
6
6
  mustache (~> 1.1)
7
7
  open4
@@ -22,7 +22,7 @@ GEM
22
22
  tzinfo (~> 1.1)
23
23
  addressable (2.7.0)
24
24
  public_suffix (>= 2.0.2, < 5.0)
25
- algoliasearch (1.27.0)
25
+ algoliasearch (1.27.1)
26
26
  httpclient (~> 2.8, >= 2.8.3)
27
27
  json (>= 1.5.1)
28
28
  ast (2.4.0)
@@ -36,10 +36,10 @@ GEM
36
36
  clintegracon (0.7.0)
37
37
  colored (~> 1.2)
38
38
  diffy
39
- cocoapods (1.8.0)
39
+ cocoapods (1.8.4)
40
40
  activesupport (>= 4.0.2, < 5)
41
41
  claide (>= 1.0.2, < 2.0)
42
- cocoapods-core (= 1.8.0)
42
+ cocoapods-core (= 1.8.4)
43
43
  cocoapods-deintegrate (>= 1.0.3, < 2.0)
44
44
  cocoapods-downloader (>= 1.2.2, < 2.0)
45
45
  cocoapods-plugins (>= 1.0.0, < 2.0)
@@ -55,10 +55,10 @@ GEM
55
55
  nap (~> 1.0)
56
56
  ruby-macho (~> 1.4)
57
57
  xcodeproj (>= 1.11.1, < 2.0)
58
- cocoapods-core (1.8.0)
58
+ cocoapods-core (1.8.4)
59
59
  activesupport (>= 4.0.2, < 6)
60
60
  algoliasearch (~> 1.0)
61
- concurrent-ruby (~> 1.0)
61
+ concurrent-ruby (~> 1.1)
62
62
  fuzzy_match (~> 2.0.4)
63
63
  nap (~> 1.0)
64
64
  cocoapods-deintegrate (1.0.4)
@@ -67,7 +67,7 @@ GEM
67
67
  nap
68
68
  cocoapods-search (1.0.0)
69
69
  cocoapods-stats (1.1.0)
70
- cocoapods-trunk (1.4.0)
70
+ cocoapods-trunk (1.4.1)
71
71
  nap (>= 0.8, < 2.0)
72
72
  netrc (~> 0.11)
73
73
  cocoapods-try (1.1.0)
@@ -78,7 +78,7 @@ GEM
78
78
  colored2 (~> 3.1)
79
79
  crack (0.4.3)
80
80
  safe_yaml (~> 1.0.0)
81
- danger (6.0.9)
81
+ danger (6.1.0)
82
82
  claide (~> 1.0)
83
83
  claide-plugins (>= 0.9.2)
84
84
  colored2 (~> 3.1)
@@ -93,7 +93,7 @@ GEM
93
93
  terminal-table (~> 1)
94
94
  diffy (3.3.0)
95
95
  escape (0.0.4)
96
- faraday (0.15.4)
96
+ faraday (0.17.0)
97
97
  multipart-post (>= 1.2, < 3)
98
98
  faraday-http-cache (2.0.0)
99
99
  faraday (~> 0.8)
@@ -112,7 +112,7 @@ GEM
112
112
  kramdown (~> 2.0)
113
113
  liferaft (0.0.6)
114
114
  metaclass (0.0.4)
115
- minitest (5.12.0)
115
+ minitest (5.13.0)
116
116
  mocha (1.9.0)
117
117
  metaclass (~> 0.0.1)
118
118
  mocha-on-bacon (0.2.3)
@@ -127,8 +127,8 @@ GEM
127
127
  octokit (4.14.0)
128
128
  sawyer (~> 0.8.0, >= 0.5.3)
129
129
  open4 (1.3.4)
130
- parallel (1.17.0)
131
- parser (2.6.4.1)
130
+ parallel (1.18.0)
131
+ parser (2.6.5.0)
132
132
  ast (~> 2.4.0)
133
133
  powerpack (0.1.2)
134
134
  prettybacon (0.0.2)
@@ -138,7 +138,7 @@ GEM
138
138
  rake
139
139
  rake (10.5.0)
140
140
  redcarpet (3.5.0)
141
- rouge (3.11.0)
141
+ rouge (3.12.0)
142
142
  rubocop (0.49.0)
143
143
  parallel (~> 1.10)
144
144
  parser (>= 2.3.3.1, < 3.0)
@@ -161,13 +161,13 @@ GEM
161
161
  tzinfo (1.2.5)
162
162
  thread_safe (~> 0.1)
163
163
  unicode-display_width (1.6.0)
164
- webmock (3.7.5)
164
+ webmock (3.7.6)
165
165
  addressable (>= 2.3.6)
166
166
  crack (>= 0.3.2)
167
167
  hashdiff (>= 0.4.0, < 2.0.0)
168
168
  xcinvoke (0.3.0)
169
169
  liferaft (~> 0.0.6)
170
- xcodeproj (1.12.0)
170
+ xcodeproj (1.13.0)
171
171
  CFPropertyList (>= 2.3.3, < 4.0)
172
172
  atomos (~> 0.1.3)
173
173
  claide (>= 1.0.2, < 2.0)
data/README.md CHANGED
@@ -150,6 +150,33 @@ jazzy \
150
150
  --module AFNetworking
151
151
  ```
152
152
 
153
+ ### Mixed Objective-C / Swift
154
+
155
+ *This feature is new and has some rough edges.*
156
+
157
+ To generate documentation for a mixed Swift and Objective-C project you must first
158
+ generate two [SourceKitten][sourcekitten] files: one for Swift and one for Objective-C.
159
+
160
+ Then pass these files to Jazzy together using `--sourcekitten-sourcefile`.
161
+
162
+ #### Example
163
+
164
+ This is how docs are generated from an Xcode project for a module containing both
165
+ Swift and Objective-C files:
166
+
167
+ ```shell
168
+ # Generate Swift SourceKitten output
169
+ sourcekitten doc -- -workspace MyProject.xcworkspace -scheme MyScheme > swiftDoc.json
170
+
171
+ # Generate Objective-C SourceKitten output
172
+ sourcekitten doc --objc $(pwd)/MyProject/MyProject.h \
173
+ -- -x objective-c -isysroot $(xcrun --show-sdk-path --sdk iphonesimulator) \
174
+ -I $(pwd) -fmodules > objcDoc.json
175
+
176
+ # Feed both outputs to Jazzy as a comma-separated list
177
+ jazzy --sourcekitten-sourcefile swiftDoc.json,objcDoc.json
178
+ ```
179
+
153
180
  ### Themes
154
181
 
155
182
  Three themes are provided with jazzy: `apple` (default), `fullwidth` and `jony`.
@@ -331,7 +358,7 @@ Instructions to build SourceKitten from source can be found at
331
358
  - Leverage modern HTML templating ([Mustache][mustache])
332
359
  - Leverage the power and accuracy of the [Clang AST][ast] and [SourceKit][sourcekit]
333
360
  - Support for Dash docsets
334
- - Support Swift and Objective-C (*mixed projects are a work in progress*)
361
+ - Support Swift and Objective-C
335
362
 
336
363
  ## License
337
364
 
Binary file
@@ -102,6 +102,14 @@ module Jazzy
102
102
  Pathname(Dir[abs_path][0] || abs_path) # Use existing filesystem spelling
103
103
  end
104
104
 
105
+ def hide_swift?
106
+ hide_declarations == 'swift'
107
+ end
108
+
109
+ def hide_objc?
110
+ hide_declarations == 'objc'
111
+ end
112
+
105
113
  # ──────── Build ────────
106
114
 
107
115
  # rubocop:disable Layout/AlignParameters
@@ -143,9 +151,9 @@ module Jazzy
143
151
  command_line: '--hide-declarations [objc|swift] ',
144
152
  description: 'Hide declarations in the specified language. Given that ' \
145
153
  'generating Swift docs only generates Swift declarations, ' \
146
- 'this is only really useful to display just the Swift ' \
147
- 'declarations & names when generating docs for an ' \
148
- 'Objective-C framework.',
154
+ 'this is useful for hiding a specific interface for ' \
155
+ 'either Objective-C or mixed Objective-C and Swift ' \
156
+ 'projects.',
149
157
  default: ''
150
158
 
151
159
  config_attr :config_file,
@@ -165,9 +173,10 @@ module Jazzy
165
173
  description: 'Back-compatibility alias for build_tool_arguments.'
166
174
 
167
175
  config_attr :sourcekitten_sourcefile,
168
- command_line: ['-s', '--sourcekitten-sourcefile FILEPATH'],
169
- description: 'File generated from sourcekitten output to parse',
170
- parse: ->(s) { expand_path(s) }
176
+ command_line: ['-s', '--sourcekitten-sourcefile filepath1,…filepathN',
177
+ Array],
178
+ description: 'File(s) generated from sourcekitten output to parse',
179
+ parse: ->(paths) { paths.map { |path| expand_path(path) } }
171
180
 
172
181
  config_attr :source_directory,
173
182
  command_line: '--source-directory DIRPATH',
@@ -32,10 +32,6 @@ module Jazzy
32
32
  config.objc_mode && config.hide_declarations != 'objc'
33
33
  end
34
34
 
35
- def language
36
- objc_first? ? 'Objective-C' : 'Swift'
37
- end
38
-
39
35
  def language_stub
40
36
  objc_first? ? 'objc' : 'swift'
41
37
  end
@@ -53,8 +53,9 @@ module Jazzy
53
53
  # @param [Config] options
54
54
  # @return [SourceModule] the documented source module
55
55
  def self.build(options)
56
- if options.sourcekitten_sourcefile
57
- stdout = options.sourcekitten_sourcefile.read
56
+ if options.sourcekitten_sourcefile_configured
57
+ stdout = '[' + options.sourcekitten_sourcefile.map(&:read)
58
+ .join(',') + ']'
58
59
  elsif options.podspec_configured
59
60
  pod_documenter = PodspecDocumenter.new(options.podspec)
60
61
  stdout = pod_documenter.sourcekitten_output(options)
@@ -329,6 +330,7 @@ module Jazzy
329
330
  name: item.name,
330
331
  abstract: abstract,
331
332
  declaration: item.display_declaration,
333
+ language: item.display_language,
332
334
  other_language_declaration: item.display_other_language_declaration,
333
335
  usr: item.usr,
334
336
  dash_type: item.type.dash_type,
@@ -1,3 +1,3 @@
1
1
  module Jazzy
2
- VERSION = '0.11.2'.freeze unless defined? Jazzy::VERSION
2
+ VERSION = '0.12.0'.freeze unless defined? Jazzy::VERSION
3
3
  end
@@ -3,6 +3,9 @@ require 'rouge'
3
3
  module Jazzy
4
4
  # This module helps highlight code
5
5
  module Highlighter
6
+ SWIFT = 'swift'.freeze
7
+ OBJC = 'objective_c'.freeze
8
+
6
9
  class Formatter < Rouge::Formatters::HTML
7
10
  def initialize(language)
8
11
  @language = language
@@ -16,16 +19,15 @@ module Jazzy
16
19
  end
17
20
  end
18
21
 
19
- # What Rouge calls the language
20
- def self.default_language
21
- if Config.instance.objc_mode
22
- 'objective_c'
23
- else
24
- 'swift'
25
- end
22
+ def self.highlight_swift(source)
23
+ highlight(source, SWIFT)
24
+ end
25
+
26
+ def self.highlight_objc(source)
27
+ highlight(source, OBJC)
26
28
  end
27
29
 
28
- def self.highlight(source, language = default_language)
30
+ def self.highlight(source, language)
29
31
  source && Rouge.highlight(source, language, Formatter.new(language))
30
32
  end
31
33
  end
@@ -1,6 +1,7 @@
1
1
  require 'jazzy/source_declaration/access_control_level'
2
2
  require 'jazzy/source_declaration/type'
3
3
 
4
+ # rubocop:disable Metrics/ClassLength
4
5
  module Jazzy
5
6
  class SourceDeclaration
6
7
  # kind of declaration (e.g. class, variable, function)
@@ -13,6 +14,14 @@ module Jazzy
13
14
  children.any?
14
15
  end
15
16
 
17
+ def swift?
18
+ type.swift_type?
19
+ end
20
+
21
+ def highlight_language
22
+ swift? ? Highlighter::SWIFT : Highlighter::OBJC
23
+ end
24
+
16
25
  # When referencing this item from its parent category,
17
26
  # include the content or just link to it directly?
18
27
  def omit_content_from_parent?
@@ -67,17 +76,32 @@ module Jazzy
67
76
  name.split(/[\(\)]/) if type.objc_category?
68
77
  end
69
78
 
79
+ def swift_objc_extension?
80
+ type.swift_extension? && usr && usr.start_with?('c:objc')
81
+ end
82
+
83
+ def swift_extension_objc_name
84
+ return unless type.swift_extension? && usr
85
+
86
+ usr.split('(cs)').last
87
+ end
88
+
89
+ # The language in the templates for display
90
+ def display_language
91
+ return 'Swift' if swift?
92
+
93
+ Config.instance.hide_objc? ? 'Swift' : 'Objective-C'
94
+ end
95
+
70
96
  def display_declaration
71
- if Config.instance.hide_declarations == 'objc'
72
- other_language_declaration
73
- else
74
- declaration
75
- end
97
+ return declaration if swift?
98
+
99
+ Config.instance.hide_objc? ? other_language_declaration : declaration
76
100
  end
77
101
 
78
102
  def display_other_language_declaration
79
103
  other_language_declaration unless
80
- %w[swift objc].include? Config.instance.hide_declarations
104
+ Config.instance.hide_objc? || Config.instance.hide_swift?
81
105
  end
82
106
 
83
107
  attr_accessor :file
@@ -77,6 +77,10 @@ module Jazzy
77
77
  kind == 'sourcekitten.source.lang.objc.decl.class'
78
78
  end
79
79
 
80
+ def swift_type?
81
+ kind.include? 'swift'
82
+ end
83
+
80
84
  def swift_enum_case?
81
85
  kind == 'source.lang.swift.decl.enumcase'
82
86
  end
@@ -65,7 +65,7 @@ module Jazzy
65
65
  type_categories, uncategorized = group_type_categories(
66
66
  docs, custom_categories.any? ? 'Other ' : ''
67
67
  )
68
- custom_categories + type_categories + uncategorized
68
+ custom_categories + merge_categories(type_categories) + uncategorized
69
69
  end
70
70
 
71
71
  def self.group_custom_categories(docs)
@@ -98,6 +98,19 @@ module Jazzy
98
98
  [group.compact, docs]
99
99
  end
100
100
 
101
+ # Join categories with the same name (eg. ObjC and Swift classes)
102
+ def self.merge_categories(categories)
103
+ merged = []
104
+ categories.each do |new_category|
105
+ if existing = merged.find { |c| c.name == new_category.name }
106
+ existing.children += new_category.children
107
+ else
108
+ merged.append(new_category)
109
+ end
110
+ end
111
+ merged
112
+ end
113
+
101
114
  def self.make_group(group, name, abstract, url_name = nil)
102
115
  group.reject! { |doc| doc.name.empty? }
103
116
  unless group.empty?
@@ -262,8 +275,13 @@ module Jazzy
262
275
  def self.should_document?(doc)
263
276
  return false if doc['key.doc.comment'].to_s.include?(':nodoc:')
264
277
 
278
+ type = SourceDeclaration::Type.new(doc['key.kind'])
279
+
265
280
  # Always document Objective-C declarations.
266
- return true if Config.instance.objc_mode
281
+ return true unless type.swift_type?
282
+
283
+ # Don't document Swift types if we are hiding Swift
284
+ return false if Config.instance.hide_swift?
267
285
 
268
286
  # Don't document @available declarations with no USR, since it means
269
287
  # they're unavailable.
@@ -272,7 +290,6 @@ module Jazzy
272
290
  end
273
291
 
274
292
  # Document extensions & enum elements, since we can't tell their ACL.
275
- type = SourceDeclaration::Type.new(doc['key.kind'])
276
293
  return true if type.swift_enum_element?
277
294
  if type.swift_extension?
278
295
  return Array(doc['key.substructure']).any? do |subdoc|
@@ -296,14 +313,14 @@ module Jazzy
296
313
  make_default_doc_info(declaration)
297
314
 
298
315
  filepath = doc['key.filepath']
299
- objc = Config.instance.objc_mode
300
- if objc || should_mark_undocumented(filepath)
316
+
317
+ if !declaration.swift? || should_mark_undocumented(filepath)
301
318
  @stats.add_undocumented(declaration)
302
319
  return nil if @skip_undocumented
303
320
  declaration.abstract = undocumented_abstract
304
321
  else
305
322
  declaration.abstract = Markdown.render(doc['key.doc.comment'] || '',
306
- Highlighter.default_language)
323
+ declaration.highlight_language)
307
324
  end
308
325
 
309
326
  declaration
@@ -322,16 +339,7 @@ module Jazzy
322
339
  def self.make_doc_info(doc, declaration)
323
340
  return unless should_document?(doc)
324
341
 
325
- if Config.instance.objc_mode
326
- declaration.declaration =
327
- Highlighter.highlight(doc['key.parsed_declaration'])
328
- declaration.other_language_declaration =
329
- Highlighter.highlight(doc['key.swift_declaration'], 'swift')
330
- else
331
- declaration.declaration =
332
- Highlighter.highlight(make_swift_declaration(doc, declaration))
333
- end
334
-
342
+ highlight_declaration(doc, declaration)
335
343
  make_deprecation_info(doc, declaration)
336
344
 
337
345
  unless doc['key.doc.full_as_xml']
@@ -339,7 +347,7 @@ module Jazzy
339
347
  end
340
348
 
341
349
  declaration.abstract = Markdown.render(doc['key.doc.comment'] || '',
342
- Highlighter.default_language)
350
+ declaration.highlight_language)
343
351
  declaration.discussion = ''
344
352
  declaration.return = Markdown.rendered_returns
345
353
  declaration.parameters = parameters(doc, Markdown.rendered_parameters)
@@ -347,6 +355,18 @@ module Jazzy
347
355
  @stats.add_documented
348
356
  end
349
357
 
358
+ def self.highlight_declaration(doc, declaration)
359
+ if declaration.swift?
360
+ declaration.declaration =
361
+ Highlighter.highlight_swift(make_swift_declaration(doc, declaration))
362
+ else
363
+ declaration.declaration =
364
+ Highlighter.highlight_objc(doc['key.parsed_declaration'])
365
+ declaration.other_language_declaration =
366
+ Highlighter.highlight_swift(doc['key.swift_declaration'])
367
+ end
368
+ end
369
+
350
370
  def self.make_deprecation_info(doc, declaration)
351
371
  if declaration.deprecated
352
372
  declaration.deprecation_message =
@@ -401,8 +421,7 @@ module Jazzy
401
421
  parsed &&
402
422
  (annotated.include?(' = default') || # SR-2608
403
423
  parsed.match('@autoclosure|@escaping') || # SR-6321
404
- parsed.include?("\n") ||
405
- parsed.include?('extension '))
424
+ parsed.include?("\n"))
406
425
  end
407
426
 
408
427
  # Replace the fully qualified name of a type with its base name
@@ -424,6 +443,9 @@ module Jazzy
424
443
  # From source code
425
444
  parsed_decl = doc['key.parsed_declaration']
426
445
 
446
+ # Don't present type attributes on extensions
447
+ return parsed_decl if declaration.type.extension?
448
+
427
449
  decl =
428
450
  if prefer_parsed_decl?(parsed_decl, annotated_decl_body)
429
451
  # Strip any attrs captured by parsed version
@@ -473,8 +495,7 @@ module Jazzy
473
495
  declaration.type = SourceDeclaration::Type.new(doc['key.kind'])
474
496
  declaration.typename = doc['key.typename']
475
497
  declaration.objc_name = doc['key.name']
476
- documented_name = if Config.instance.hide_declarations == 'objc' &&
477
- doc['key.swift_name']
498
+ documented_name = if Config.instance.hide_objc? && doc['key.swift_name']
478
499
  doc['key.swift_name']
479
500
  else
480
501
  declaration.objc_name
@@ -528,6 +549,10 @@ module Jazzy
528
549
  decls.map do |decl|
529
550
  next decl unless decl.type.extension? && decl.name.include?('.')
530
551
 
552
+ # Don't expand the Swift namespace if we're in ObjC mode.
553
+ # ex: NS_SWIFT_NAME(Foo.Bar) should not create top-level Foo
554
+ next decl if decl.swift_objc_extension? && !Config.instance.hide_objc?
555
+
531
556
  name_parts = decl.name.split('.')
532
557
  decl.name = name_parts.pop
533
558
  expand_extension(decl, name_parts, decls)
@@ -578,11 +603,18 @@ module Jazzy
578
603
 
579
604
  # Two declarations get merged if they have the same deduplication key.
580
605
  def self.deduplication_key(decl, root_decls)
581
- if decl.type.swift_extensible? || decl.type.swift_extension?
606
+ # Swift extension of objc class
607
+ if decl.swift_objc_extension?
608
+ [decl.swift_extension_objc_name, :objc_class_and_categories]
609
+ # Swift type or Swift extension of Swift type
610
+ elsif decl.type.swift_extensible? || decl.type.swift_extension?
582
611
  [decl.usr, decl.name]
612
+ # Objc categories and classes
583
613
  elsif mergeable_objc?(decl, root_decls)
584
- name, _ = decl.objc_category_name || decl.name
614
+ # Using the ObjC name to match swift_objc_extension.
615
+ name, _ = decl.objc_category_name || decl.objc_name
585
616
  [name, :objc_class_and_categories]
617
+ # Non-mergable declarations (funcs, typedefs etc...)
586
618
  else
587
619
  [decl.usr, decl.name, decl.type.kind]
588
620
  end
@@ -828,17 +860,14 @@ module Jazzy
828
860
  @min_acl = min_acl
829
861
  @skip_undocumented = skip_undocumented
830
862
  @stats = Stats.new
831
- sourcekitten_json = filter_files(JSON.parse(sourcekitten_output))
863
+ sourcekitten_json = filter_files(JSON.parse(sourcekitten_output).flatten)
832
864
  docs = make_source_declarations(sourcekitten_json).concat inject_docs
833
865
  docs = expand_extensions(docs)
834
866
  docs = deduplicate_declarations(docs)
835
- if Config.instance.objc_mode
836
- docs = reject_objc_types(docs)
837
- else
838
- # Remove top-level enum cases because it means they have an ACL lower
839
- # than min_acl
840
- docs = docs.reject { |doc| doc.type.swift_enum_element? }
841
- end
867
+ docs = reject_objc_types(docs)
868
+ # Remove top-level enum cases because it means they have an ACL lower
869
+ # than min_acl
870
+ docs = docs.reject { |doc| doc.type.swift_enum_element? }
842
871
  ungrouped_docs = docs
843
872
  docs = group_docs(docs)
844
873
  make_doc_urls(docs)
@@ -52,13 +52,9 @@ require 'cocoapods'
52
52
 
53
53
  def configure_cocoapods
54
54
  Pod::Config.instance.with_changes(silent: true) do
55
- config = Pod::Config.instance
56
- # working around a bug where `pod setup --silent` isn't silent
57
- if config.sources_manager.master_repo_functional?
58
- Pod::Command::Repo::Update.invoke(%w[master])
59
- else
60
- Pod::Command::Setup.invoke
61
- end
55
+ Pod::Command::Setup.invoke
56
+ Pod::Command::Repo::AddCDN.invoke(%w[trunk https://cdn.cocoapods.org/])
57
+ Pod::Command::Repo::Update.invoke(%w[trunk])
62
58
  end
63
59
  end
64
60
 
@@ -77,8 +73,11 @@ CLIntegracon.configure do |c|
77
73
  File.write(
78
74
  path,
79
75
  File.read(path).gsub(
80
- (ROOT + 'tmp').to_s,
76
+ c.temp_path.to_s,
81
77
  '<TMP>',
78
+ ).gsub(
79
+ c.spec_path.to_s,
80
+ '<SPEC>',
82
81
  ),
83
82
  )
84
83
  end
@@ -164,9 +163,23 @@ describe_cli 'jazzy' do
164
163
  "--head #{realm_head.shellescape}"
165
164
  end
166
165
 
167
- describe 'Creates docs for ObjC project with a variety of contents' do
166
+ describe 'Creates docs for ObjC-Swift project with a variety of contents' do
167
+ base = ROOT + 'spec/integration_specs/misc_jazzy_objc_features/before'
168
+ Dir.chdir(base) do
169
+ sourcekitten = ROOT + 'bin/sourcekitten'
170
+ sdk = `xcrun --show-sdk-path --sdk iphonesimulator`.chomp
171
+ objc_args = "#{base}/MiscJazzyObjCFeatures/MiscJazzyObjCFeatures.h " \
172
+ '-- -x objective-c ' \
173
+ "-isysroot #{sdk} " \
174
+ "-I #{base} " \
175
+ '-fmodules'
176
+ `#{sourcekitten} doc --objc #{objc_args} > objc.json`
177
+ `#{sourcekitten} doc > swift.json`
178
+ end
179
+
168
180
  behaves_like cli_spec 'misc_jazzy_objc_features',
169
- '--theme fullwidth'
181
+ '--theme fullwidth '\
182
+ '-s objc.json,swift.json'
170
183
  end
171
184
  end if !spec_subset || spec_subset == 'objc'
172
185
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jazzy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JP Simard
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-09-25 00:00:00.000000000 Z
13
+ date: 2019-11-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: cocoapods