[Localization] Make localization producer handle printing diagnostics IDs

This commit is contained in:
Hassan
2020-10-21 02:04:20 +02:00
parent dc5a4bd1ec
commit 1b0e8f9cec
5 changed files with 44 additions and 27 deletions

View File

@@ -154,14 +154,16 @@ public:
};
class LocalizationProducer {
bool printDiagnosticName;
public:
LocalizationProducer(bool printDiagnosticName = false)
: printDiagnosticName(printDiagnosticName) {}
/// If the message isn't available/localized in current context
/// return the fallback default message.
virtual llvm::StringRef getMessageOr(swift::DiagID id,
llvm::StringRef defaultMessage) const {
auto message = getMessage(id);
return message.empty() ? defaultMessage : message;
}
llvm::StringRef defaultMessage) const;
virtual ~LocalizationProducer() {}
@@ -177,7 +179,8 @@ class YAMLLocalizationProducer final : public LocalizationProducer {
public:
/// The diagnostics IDs that are no longer available in `.def`
std::vector<std::string> unknownIDs;
explicit YAMLLocalizationProducer(llvm::StringRef filePath);
explicit YAMLLocalizationProducer(llvm::StringRef filePath,
bool printDiagnosticName = false);
/// Iterate over all of the available (non-empty) translations
/// maintained by this producer, callback gets each translation
@@ -198,7 +201,8 @@ class SerializedLocalizationProducer final : public LocalizationProducer {
public:
explicit SerializedLocalizationProducer(
std::unique_ptr<llvm::MemoryBuffer> buffer);
std::unique_ptr<llvm::MemoryBuffer> buffer,
bool printDiagnosticName = false);
protected:
llvm::StringRef getMessage(swift::DiagID id) const override;