Commits

Drew Crawford committed aa5cf2b8429
[Serialization] Don't serialize non-public documentation Let's say I am a good citizen and document my private symbols: /** My TOP SECRET DOCUMENTATION */ private class Foo { } When I go to distribute the compiled binary, I find out my private documentation is distributed as well: $ swiftc test.swift -emit-module -module-name "test" $ strings test.swiftdoc My TOP SECRET DOCUMENTATION /** My TOP SECRET DOCUMENTATION */ If a client can't use a symbol (e.g. it's private [or internal and not -enable-testing]) don't emit the documentation for a symbol in the swiftdoc. Fixes: SR-762, rdar://21453624 The test coverage implements this truth table: | visibility | -enable-testing | documentation? | |------------|-----------------|----------------| | private | no | ❌ | | internal | no | ❌ | | public | no | ✅ | | private | yes | ❌ | | internal | yes | ✅ | | public | yes | ✅ | Modified the existing comments test coverage to expect non-public documentation not to be emitted. Don't rely on existing comment structure Refuse to emit comments if the decl cannot actually have one. To accomplish this, we move `canHaveComment` into the Decl instance. It must also be marked `const`, since one of its existing usages operates on a const pointer. Perform fewer checks when serializing the standard library.