diff --git a/src/Compiler/Checking/ConstraintSolver.fs b/src/Compiler/Checking/ConstraintSolver.fs index e711ec7e262..f74e7509df9 100644 --- a/src/Compiler/Checking/ConstraintSolver.fs +++ b/src/Compiler/Checking/ConstraintSolver.fs @@ -1090,7 +1090,12 @@ and SolveAnonInfoEqualsAnonInfo (csenv: ConstraintSolverEnv) m2 (anonInfo1: Anon let missingFields = String.concat ", " missingFields FSComp.SR.tcAnonRecdMultipleFieldsNameSubset(string missingFields) | Superset extraFields -> - FSComp.SR.tcAnonRecdFieldNameSuperset(string extraFields) + match extraFields with + | [extraField] -> + FSComp.SR.tcAnonRecdSingleFieldNameSuperset(string extraField) + | _ -> + let extraFields = String.concat ", " extraFields + FSComp.SR.tcAnonRecdMultipleFieldsNameSuperset(string extraFields) | Overlap (missingFields, extraFields) -> FSComp.SR.tcAnonRecdFieldNameMismatch(string missingFields, string extraFields) | CompletelyDifferent missingFields -> diff --git a/src/Compiler/FSComp.txt b/src/Compiler/FSComp.txt index 9f786ad9b18..b6d363e374e 100644 --- a/src/Compiler/FSComp.txt +++ b/src/Compiler/FSComp.txt @@ -1397,7 +1397,8 @@ tcAnonRecdCcuMismatch,"Two anonymous record types are from different assemblies tcAnonRecdFieldNameMismatch,"This anonymous record does not exactly match the expected shape. Add the missing fields %s and remove the extra fields %s." tcAnonRecdSingleFieldNameSubset,"This anonymous record is missing field '%s'." tcAnonRecdMultipleFieldsNameSubset,"This anonymous record is missing fields '%s'." -tcAnonRecdFieldNameSuperset,"This anonymous record has too many fields. Remove the extra fields %s." +tcAnonRecdSingleFieldNameSuperset,"This anonymous record has an extra field. Remove field '%s'." +tcAnonRecdMultipleFieldsNameSuperset,"This anonymous record has extra fields. Remove fields '%s'." tcAnonRecdFieldNameDifferent,"This is the wrong anonymous record. It should have the fields %s." keywordDescriptionAbstract,"Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation." keywordDescriptionAnd,"Used in mutually recursive bindings, in property declarations, and with multiple constraints on generic parameters." diff --git a/src/Compiler/xlf/FSComp.txt.cs.xlf b/src/Compiler/xlf/FSComp.txt.cs.xlf index eafe702269c..122ea1de3b8 100644 --- a/src/Compiler/xlf/FSComp.txt.cs.xlf +++ b/src/Compiler/xlf/FSComp.txt.cs.xlf @@ -1027,11 +1027,6 @@ Toto je nesprávný anonymní záznam. Měl by mít pole {0}. - - This anonymous record has too many fields. Remove the extra fields {0}. - Tento anonymní záznam má příliš mnoho polí. Odeberte nadbytečná pole {0}. - - Invalid Anonymous Record type declaration. Neplatná deklarace typu anonymního záznamu @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. Pole {0} se v tomto anonymním typu záznamu vyskytuje vícekrát. diff --git a/src/Compiler/xlf/FSComp.txt.de.xlf b/src/Compiler/xlf/FSComp.txt.de.xlf index 181d79f304d..230776c2d0e 100644 --- a/src/Compiler/xlf/FSComp.txt.de.xlf +++ b/src/Compiler/xlf/FSComp.txt.de.xlf @@ -1027,11 +1027,6 @@ Dies ist der falsche anonyme Datensatz. Er muss folgende Felder umfassen: {0}. - - This anonymous record has too many fields. Remove the extra fields {0}. - Dieser anonyme Datensatz enthält zu viele Felder. Entfernen Sie die zusätzlichen Felder ({0}). - - Invalid Anonymous Record type declaration. Ungültige Deklaration für anonymen Datensatztyp. @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. Das Feld "{0}" ist in diesem anonymen Datensatztyp mehrmals vorhanden. diff --git a/src/Compiler/xlf/FSComp.txt.es.xlf b/src/Compiler/xlf/FSComp.txt.es.xlf index b0d9d82dc97..735892b2d63 100644 --- a/src/Compiler/xlf/FSComp.txt.es.xlf +++ b/src/Compiler/xlf/FSComp.txt.es.xlf @@ -1027,11 +1027,6 @@ Este es un registro anónimo incorrecto. Debe tener los campos {0}. - - This anonymous record has too many fields. Remove the extra fields {0}. - Este registro anónimo tiene demasiados campos. Quite los campos adicionales {0}. - - Invalid Anonymous Record type declaration. Declaración de tipo de registro anónimo no válido. @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. El campo "{0}" aparece varias veces en este tipo de registro anónimo. diff --git a/src/Compiler/xlf/FSComp.txt.fr.xlf b/src/Compiler/xlf/FSComp.txt.fr.xlf index e80c6033a52..f0b0110c1d4 100644 --- a/src/Compiler/xlf/FSComp.txt.fr.xlf +++ b/src/Compiler/xlf/FSComp.txt.fr.xlf @@ -1027,11 +1027,6 @@ Il s'agit de l'enregistrement anonyme incorrect. Il doit contenir les champs {0}. - - This anonymous record has too many fields. Remove the extra fields {0}. - Cet enregistrement anonyme a trop de champs. Supprimez les champs supplémentaires {0}. - - Invalid Anonymous Record type declaration. Déclaration de type d'enregistrement anonyme non valide. @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. Le champ '{0}' apparaît plusieurs fois dans ce type d'enregistrement anonyme. diff --git a/src/Compiler/xlf/FSComp.txt.it.xlf b/src/Compiler/xlf/FSComp.txt.it.xlf index e40b57dae11..30c0a6222a1 100644 --- a/src/Compiler/xlf/FSComp.txt.it.xlf +++ b/src/Compiler/xlf/FSComp.txt.it.xlf @@ -1027,11 +1027,6 @@ Si tratta del record anonimo errato. Deve includere i campi {0}. - - This anonymous record has too many fields. Remove the extra fields {0}. - Questo record anonimo contiene troppi campi. Rimuovere i campi aggiuntivi {0}. - - Invalid Anonymous Record type declaration. La dichiarazione di tipo Record anonimo non è valida. @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. Il campo '{0}' viene visualizzato più volte in questo tipo di record anonimo. diff --git a/src/Compiler/xlf/FSComp.txt.ja.xlf b/src/Compiler/xlf/FSComp.txt.ja.xlf index 9f9830e214f..3e8d4113a7b 100644 --- a/src/Compiler/xlf/FSComp.txt.ja.xlf +++ b/src/Compiler/xlf/FSComp.txt.ja.xlf @@ -1027,11 +1027,6 @@ この匿名レコードは正しくありません。フィールド {0} を含んでいる必要があります。 - - This anonymous record has too many fields. Remove the extra fields {0}. - この匿名レコードはフィールドが多すぎます。不要なフィールド {0} を削除してください。 - - Invalid Anonymous Record type declaration. 匿名レコードの型宣言が無効です。 @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. この匿名レコードの種類に、フィールド '{0}' が複数回出現します。 diff --git a/src/Compiler/xlf/FSComp.txt.ko.xlf b/src/Compiler/xlf/FSComp.txt.ko.xlf index f5b2130327e..f15468f49eb 100644 --- a/src/Compiler/xlf/FSComp.txt.ko.xlf +++ b/src/Compiler/xlf/FSComp.txt.ko.xlf @@ -1027,11 +1027,6 @@ 잘못된 익명 레코드입니다. {0} 필드가 있어야 합니다. - - This anonymous record has too many fields. Remove the extra fields {0}. - 이 익명 레코드에 필드가 너무 많습니다. 추가 필드 {0}을(를) 제거하세요. - - Invalid Anonymous Record type declaration. 익명 레코드 형식 선언이 잘못되었습니다. @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. '{0}' 필드가 이 익명 레코드 형식에서 여러 번 나타납니다. diff --git a/src/Compiler/xlf/FSComp.txt.pl.xlf b/src/Compiler/xlf/FSComp.txt.pl.xlf index 8ba98da9f2d..3f1b221b367 100644 --- a/src/Compiler/xlf/FSComp.txt.pl.xlf +++ b/src/Compiler/xlf/FSComp.txt.pl.xlf @@ -1027,11 +1027,6 @@ To jest nieprawidłowy rekord anonimowy. Powinien zawierać pola {0}. - - This anonymous record has too many fields. Remove the extra fields {0}. - Ten rekord anonimowy ma za dużo pól. Usuń dodatkowe pola {0}. - - Invalid Anonymous Record type declaration. Nieprawidłowa deklaracja typu rekordu anonimowego. @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. Pole „{0}” występuje wielokrotnie w tym anonimowym typie rekordu. diff --git a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf index a9c5544273f..f48acd7ac59 100644 --- a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf +++ b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf @@ -1027,11 +1027,6 @@ Este é o registro anônimo errado. Ele deve ter os campos {0}. - - This anonymous record has too many fields. Remove the extra fields {0}. - Este registro anônimo tem muitos campos. Remova os campos extras {0}. - - Invalid Anonymous Record type declaration. Declaração inválida de tipo de Registro Anônimo. @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. O campo '{0}' aparece várias vezes nesse tipo de registro anônimo. diff --git a/src/Compiler/xlf/FSComp.txt.ru.xlf b/src/Compiler/xlf/FSComp.txt.ru.xlf index 46e5d7ba3d9..3fc0f495b55 100644 --- a/src/Compiler/xlf/FSComp.txt.ru.xlf +++ b/src/Compiler/xlf/FSComp.txt.ru.xlf @@ -1027,11 +1027,6 @@ Неправильная анонимная запись. Она должна содержать поля {0}. - - This anonymous record has too many fields. Remove the extra fields {0}. - Эта анонимная запись содержит слишком много полей. Удалите лишние поля {0}. - - Invalid Anonymous Record type declaration. Недопустимое объявление типа анонимной записи. @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. Поле "{0}" появляется несколько раз в этом типе анонимной записи. diff --git a/src/Compiler/xlf/FSComp.txt.tr.xlf b/src/Compiler/xlf/FSComp.txt.tr.xlf index 0bf209b346b..99c064c052a 100644 --- a/src/Compiler/xlf/FSComp.txt.tr.xlf +++ b/src/Compiler/xlf/FSComp.txt.tr.xlf @@ -1027,11 +1027,6 @@ Bu anonim kayıt yanlış. Kayıt, {0} alanlarını içermelidir. - - This anonymous record has too many fields. Remove the extra fields {0}. - Bu anonim kayıtta çok fazla alan var. Ek {0} alanlarını kaldırın. - - Invalid Anonymous Record type declaration. Anonim Kayıt türü bildirimi geçersiz. @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. '{0}' alanı bu anonim kayıt türünde birden fazla yerde görünüyor. diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf index 978497120a0..a4ddd603216 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf @@ -1027,11 +1027,6 @@ 此匿名记录不正确。它应具有字段 {0}。 - - This anonymous record has too many fields. Remove the extra fields {0}. - 此匿名记录的字段太多。请删除额外的字段 {0}。 - - Invalid Anonymous Record type declaration. 匿名记录类型声明无效。 @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. 字段“{0}”在此匿名记录类型中多次出现。 diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf index 770e440ac62..5044ef52e5b 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf @@ -1027,11 +1027,6 @@ 此為錯誤的匿名記錄。其應有欄位 {0}。 - - This anonymous record has too many fields. Remove the extra fields {0}. - 此匿名記錄有太多欄位。請移除額外的欄位 {0}。 - - Invalid Anonymous Record type declaration. 匿名記錄型別宣告無效。 @@ -1042,11 +1037,21 @@ This anonymous record is missing fields '{0}'. + + This anonymous record has extra fields. Remove fields '{0}'. + This anonymous record has extra fields. Remove fields '{0}'. + + This anonymous record is missing field '{0}'. This anonymous record is missing field '{0}'. + + This anonymous record has an extra field. Remove field '{0}'. + This anonymous record has an extra field. Remove field '{0}'. + + The field '{0}' appears multiple times in this anonymous record type. 欄位 '{0}' 在這個匿名記錄類型中出現多次。 diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs index 98796407286..faa24a3e17a 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs @@ -41,6 +41,28 @@ let x () : {| A: int; B: string; C: int |} = {| A = 123 |} |> withDiagnostics [ (Error 1, Line 2, Col 48, Line 2, Col 61, "This anonymous record is missing fields 'B, C'.") ] + + [] + let ``Anonymous Record with extra field`` () = + Fsx """ +let x () : {| A: int; B: string |} = {| A = 123; B = ""; C = 1 |} +""" + |> compile + |> shouldFail + |> withDiagnostics [ + (Error 1, Line 2, Col 40, Line 2, Col 68, "This anonymous record has an extra field. Remove field 'C'.") + ] + + [] + let ``Anonymous Record with extra fields`` () = + Fsx """ +let x () : {| A: int |} = {| A = 123 ; B = ""; C = 1 |} +""" + |> compile + |> shouldFail + |> withDiagnostics [ + (Error 1, Line 2, Col 29, Line 2, Col 58, "This anonymous record has extra fields. Remove fields 'B, C'.") + ] [] let ``Anonymous Records with duplicate labels - Copy and update expression`` () =