mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
To ease the burden on the client, ignore some generic requirements involving
Self. For example, `Self: P` where we already know that `Self` conforms to `P`.
An example case:
```
public struct S: Equatable {
public static func ==(lhs: S, rhs: S) -> Bool { ... }
}
```
`!=` is defined in terms of `Self` and the default implementation has a `Self:
Equatable`. For the purposes of documentation, it's not necessary to specify
that again on the page of documentation for `!=`.
rdar://60963924
57 lines
1.9 KiB
C++
57 lines
1.9 KiB
C++
//===--- JSON.h - Symbol Graph JSON Helpers -------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
// Adds Symbol Graph JSON serialization to other types.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_SYMBOLGRAPHGEN_JSON_H
|
|
#define SWIFT_SYMBOLGRAPHGEN_JSON_H
|
|
|
|
#include "llvm/ADT/Triple.h"
|
|
#include "llvm/Support/JSON.h"
|
|
#include "llvm/Support/VersionTuple.h"
|
|
#include "swift/AST/GenericSignature.h"
|
|
#include "swift/AST/Type.h"
|
|
|
|
namespace swift {
|
|
namespace symbolgraphgen {
|
|
|
|
struct AttributeRAII {
|
|
StringRef Key;
|
|
llvm::json::OStream &OS;
|
|
AttributeRAII(StringRef Key, llvm::json::OStream &OS)
|
|
: Key(Key), OS(OS) {
|
|
OS.attributeBegin(Key);
|
|
}
|
|
|
|
~AttributeRAII() {
|
|
OS.attributeEnd();
|
|
}
|
|
};
|
|
|
|
void serialize(const llvm::VersionTuple &VT, llvm::json::OStream &OS);
|
|
void serialize(const llvm::Triple &T, llvm::json::OStream &OS);
|
|
void serialize(const ExtensionDecl *Extension, llvm::json::OStream &OS);
|
|
void serialize(const Requirement &Req, llvm::json::OStream &OS);
|
|
void serialize(const swift::GenericTypeParamType *Param,
|
|
llvm::json::OStream &OS);
|
|
|
|
|
|
/// Filter generic requirements that aren't relevant for documentation.
|
|
void
|
|
filterGenericRequirements(ArrayRef<Requirement> Requirements,
|
|
const NominalTypeDecl *Self,
|
|
SmallVectorImpl<Requirement> &FilteredRequirements);
|
|
} // end namespace symbolgraphgen
|
|
} // end namespace swift
|
|
|
|
#endif // SWIFT_SYMBOLGRAPHGEN_JSON_H
|