Files
swift-mirror/lib/SymbolGraphGen/JSON.h
Ashley Garland 06d1d502a1 [SymbolGraph] Ignore some Self requirements
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
2020-04-13 13:17:33 -07:00

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