mulang 4.5.3 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9bbf5e4fcf47f00c616d45c8b0501e371bff20ca1682dbcd014042564aeeef21
4
- data.tar.gz: 6ca40cb071917c838a2092acfb17b581149ed4f1b8441a5ad827c4d563e63495
3
+ metadata.gz: 9175932c143b6a0841997e1400944429565ba33beb09aabbbd9183117a041791
4
+ data.tar.gz: b9f93712987684230b357cbf4fcccd9a231fce0873c67f38db57cfe6c7f5fed0
5
5
  SHA512:
6
- metadata.gz: fbcd422c3e315b1f8ab9d9d9ed0b70ca147a44d726027e32e1ea43fa03e2f46b0cd3a36543066202bf2115b56588a496a828ec95bbc439b4921cd6f236f7af4a
7
- data.tar.gz: 39e109e694e92f149922dd24a81465ff449ddb640939ac3218da144786199c6b10de18f7b9c9bf0608509d5c8d3df30b27a4617bcc46770cc72a799a69e3a8f5
6
+ metadata.gz: d8cb2ca9a340f56f504e8c70be5d44b24d3c7ebb344eb93695abed8d6c136dd9a2196a84169e238d9d2afc8e5a4c22fa946b65804cf83a4a3580625a51bceab7
7
+ data.tar.gz: 94bd5b78f772d46e15e341d4264fdf7bca020081dfe9e3ddff05dd04df3664cedeac77413577bd0c641bc7ae441f980b932b9d9601d0a8c9083d00c77521517b
data/bin/mulang CHANGED
Binary file
@@ -0,0 +1,198 @@
1
+ ---
2
+ en:
3
+ mulang:
4
+ expectation:
5
+ must_not: must not
6
+ must: must
7
+ solution: solution
8
+ with_char: ' with character <i>%{value}</i>'
9
+ with_false: ' with value <i>%{keyword_false}</i>'
10
+ with_literal: ' with a literal value'
11
+ with_logic: ' with a boolean expression'
12
+ with_math: ' with a math expression'
13
+ with_nil: ' with <i>%{keyword_nil}</i>'
14
+ with_nonliteral: ' with a non-literal expresson'
15
+ with_number: ' with number <i>%{value}</i>'
16
+ with_string: ' with string <i>%{value}</i>'
17
+ with_symbol: ' with symbol <i>%{value}</i>'
18
+ with_true: ' with value <i>%{keyword_true}</i>'
19
+ inspection:
20
+ Assigns_except: '%{binding} %{must} assign something distinct from %{target}%{matching}'
21
+ Assigns_like: '%{binding} %{must} assign something similar to %{target}%{matching}'
22
+ Assigns_named: '%{binding} %{must} assign %{target}%{matching}'
23
+ Assigns: '%{binding} %{must} perform assignments%{matching}'
24
+ Calls_except: '%{binding} %{must} delegate to something distinct from %{target}%{matching}'
25
+ Calls_like: '%{binding} %{must} delegate to something similar to %{target}%{matching}'
26
+ Calls_named: '%{binding} %{must} use %{target}%{matching}'
27
+ Calls: '%{binding} %{must} delegate%{matching}'
28
+ Declares_except: '%{binding} %{must} contain declarations distinct from %{target}'
29
+ Declares_like: '%{binding} %{must} declare an identifier similar to %{target}'
30
+ Declares_named: '%{binding} %{must} declare %{target}'
31
+ Declares: '%{binding} %{must} contain declarations'
32
+ DeclaresAttribute_except: '%{binding} %{must} declare attributes distinct from %{target}%{matching}'
33
+ DeclaresAttribute_like: '%{binding} %{must} declare an attribute similar to %{target}%{matching}'
34
+ DeclaresAttribute_named: '%{binding} %{must} declare an attribute %{target}%{matching}'
35
+ DeclaresAttribute: '%{binding} %{must} declare attributes%{matching}'
36
+ DeclaresClass_except: '%{binding} %{must} declare classes distinct from %{target}'
37
+ DeclaresClass_like: '%{binding} %{must} declare a class similar to %{target}'
38
+ DeclaresClass_named: '%{binding} %{must} declare a class %{target}'
39
+ DeclaresClass: '%{binding} %{must} declare classes'
40
+ DeclaresComputation_except: '%{binding} %{must} declare computations distinct from %{target}'
41
+ DeclaresComputation_like: '%{binding} %{must} declare a computation similar to %{target}'
42
+ DeclaresComputation_named: '%{binding} %{must} declare a computation %{target}'
43
+ DeclaresComputation: '%{binding} %{must} declare computations'
44
+ DeclaresComputationWithArity0_named: '%{target} %{must} have zero parameters'
45
+ DeclaresComputationWithArity1_named: '%{target} %{must} have one parameter'
46
+ DeclaresComputationWithArity2_named: '%{target} %{must} have 2 parameters'
47
+ DeclaresComputationWithArity3_named: '%{target} %{must} have 3 parameters'
48
+ DeclaresComputationWithArity4_named: '%{target} %{must} have 4 parameters'
49
+ DeclaresComputationWithArity5_named: '%{target} %{must} have 5 parameters'
50
+ DeclaresEntryPoint: '%{binding} %{must} declare an entry point%{matching}'
51
+ DeclaresEnumeration_except: '%{binding} %{must} declare enumerations distinct from %{target}'
52
+ DeclaresEnumeration_like: '%{binding} %{must} declare an enumeration like %{target}'
53
+ DeclaresEnumeration_named: '%{binding} %{must} declare an enumeration %{target}'
54
+ DeclaresEnumeration: '%{binding} %{must} declare enumerations'
55
+ DeclaresFact_except: '%{binding} %{must} declare facts distinct from %{target}'
56
+ DeclaresFact_like: '%{binding} %{must} declare a fact similar to %{target}'
57
+ DeclaresFact_named: '%{binding} %{must} declare a fact %{target}'
58
+ DeclaresFact: '%{binding} %{must} declare facts'
59
+ DeclaresFunction_except: '%{binding} %{must} declare functions distinct from %{target}%{matching}'
60
+ DeclaresFunction_like: '%{binding} %{must} declare a function similar to %{target}%{matching}'
61
+ DeclaresFunction_named: '%{binding} %{must} declare a function %{target}%{matching}'
62
+ DeclaresFunction: '%{binding} %{must} debe declare functions%{matching}'
63
+ DeclaresInterface_except: '%{binding} %{must} declare interfaces distinct from %{target}%{matching}'
64
+ DeclaresInterface_like: '%{binding} %{must} declare an interface like %{target}%{matching}'
65
+ DeclaresInterface_named: '%{binding} %{must} declare an interface %{target}%{matching}'
66
+ DeclaresInterface: '%{binding} %{must} declare interfaces%{matching}%{matching}'
67
+ DeclaresMethod_except: '%{binding} %{must} declare methods distinct from %{target}%{matching}'
68
+ DeclaresMethod_like: '%{binding} %{must} declare a method similar to %{target}%{matching}'
69
+ DeclaresMethod_named: '%{binding} %{must} declare a method %{target}%{matching}'
70
+ DeclaresMethod: '%{binding} %{must} declare methods%{matching}'
71
+ DeclaresObject_except: '%{binding} %{must} declare objects distinct from %{target}%{matching}'
72
+ DeclaresObject_like: '%{binding} %{must} declare an object similar to %{target}%{matching}'
73
+ DeclaresObject_named: '%{binding} %{must} declare an object %{target}%{matching}'
74
+ DeclaresObject: '%{binding} %{must} declare objects%{matching}'
75
+ DeclaresPredicate_except: '%{binding} %{must} declare a predicate distinct from %{target}%{matching}'
76
+ DeclaresPredicate_like: '%{binding} %{must} declare a predicate similar to %{target}%{matching}'
77
+ DeclaresPredicate_named: '%{binding} %{must} declare predicates %{target}%{matching}'
78
+ DeclaresPredicate: '%{binding} %{must} declare predicates%{matching}'
79
+ DeclaresProcedure_except: '%{binding} %{must} declare procedures distinct from %{target}%{matching}'
80
+ DeclaresProcedure_like: '%{binding} %{must} declare a procedure similar to %{target}%{matching}'
81
+ DeclaresProcedure_named: '%{binding} %{must} declare a procedure %{target}%{matching}'
82
+ DeclaresProcedure: '%{binding} %{must} declare procedures%{matching}'
83
+ DeclaresRecursively_named: '%{target} %{must} declared recursively'
84
+ DeclaresRule_except: '%{binding} %{must} declare rules distinct from %{target}'
85
+ DeclaresRule_like: '%{binding} %{must} declare a rule similar to %{target}'
86
+ DeclaresRule_named: '%{binding} %{must} declare a rule %{target}'
87
+ DeclaresRule: '%{binding} %{must} debe declare rules'
88
+ DeclaresStyles_except: '%{binding} %{must} declare style distinct from %{target}'
89
+ DeclaresStyles_like: '%{binding} %{must} declare a style similar to %{target}'
90
+ DeclaresStyles_named: '%{binding} %{must} declare a style %{target}'
91
+ DeclaresStyles: '%{binding} %{must} declare styles'
92
+ DeclaresTag_except: '%{binding} %{must} declare a tag distinct from %{target}'
93
+ DeclaresTag_like: '%{binding} %{must} declare a tag similar to %{target}'
94
+ DeclaresTag_named: '%{binding} %{must} declare a tag %{target}'
95
+ DeclaresTag: '%{binding} %{must} declare a tag'
96
+ DeclaresTypeAlias_except: '%{binding} %{must} declare type aliases distinct from %{target}'
97
+ DeclaresTypeAlias_like: '%{binding} %{must} declare a type alias similar to %{target}'
98
+ DeclaresTypeAlias_named: '%{binding} %{must} declare a type alias %{target}'
99
+ DeclaresTypeAlias: '%{binding} %{must} declare type aliases'
100
+ DeclaresTypeSignature_except: '%{binding} %{must} declare a type signature distinct from %{target}'
101
+ DeclaresTypeSignature_like: '%{binding} %{must} declare a type signature for something like %{target}'
102
+ DeclaresTypeSignature_named: '%{binding} %{must} declare a type signature %{target}'
103
+ DeclaresTypeSignature: '%{binding} %{must} decarar type signatures'
104
+ DeclaresVariable_except: '%{binding} %{must} declare variables distinct from %{target}%{matching}'
105
+ DeclaresVariable_like: '%{binding} %{must} declare a variable similar to %{target}%{matching}'
106
+ DeclaresVariable_named: '%{binding} %{must} declare a variable %{target}%{matching}'
107
+ DeclaresVariable: '%{binding} %{must} debe declare variables%{matching}'
108
+ DiscardsExceptions: '%{binding} is ignoring exceptions silently'
109
+ DoesConsolePrint: '%{binding} is printing to the console'
110
+ DoesNilTest: '%{binding} does <i>%{keyword_null}</i> tests'
111
+ DoesNullTest: '%{binding} does <i>%{keyword_null}</i> tests'
112
+ DoesTypeTest: '%{binding} string type tests'
113
+ HasAssignmentReturn: '%{binding} returns the result of an assignment'
114
+ HasCodeDuplication: '%{binding} has code duplication'
115
+ HasEmptyIfBranches: '%{binding} has empty <i>%{keyword_if}</i> branches'
116
+ HasLongParameterList: '%{binding} has too many parameters. You may be missing an abstraction.'
117
+ HasMisspelledBindings: '%{binding} is misspelled'
118
+ HasMisspelledIdentifiers: '%{binding} is misspelled'
119
+ HasRedundantBooleanComparison: '%{binding} makes unnecesary boolean comparisons'
120
+ HasRedundantGuards: '%{binding} has unnecessary guards'
121
+ HasRedundantIf: '%{binding} has unnecessary <i>%{keyword_if}</i>s'
122
+ HasRedundantLambda: '%{binding} has unnecessary lambdas'
123
+ HasRedundantLocalVariableReturn: '%{binding} has unnecesary local variables; please try returning the expression directly'
124
+ HasRedundantParameter: '%{binding} has unnecessary parameters, that can be removed using point-free'
125
+ HasRedundantReduction: '%{binding} uses <i>%{keyword_is}</i>, but it does not artihmetic'
126
+ HasTooManyMethods: '%{binding} has too many methods'
127
+ HasTooShortBindings: '%{binding} is a too short identifier'
128
+ HasTooShortIdentifiers: '%{binding} is a too short identifier'
129
+ HasUnreachableCode: '%{binding} has unreachable code'
130
+ HasWrongCaseBindings: '%{binding} does not honor case conventions'
131
+ HasWrongCaseIdentifiers: '%{binding} does not honor case conventions'
132
+ Implements_except: '%{binding} %{must} implement interfaces distinct from %{target}'
133
+ Implements_like: '%{binding} %{must} implement interfaces like %{target}'
134
+ Implements_named: '%{binding} %{must} implement %{target}'
135
+ Implements: '%{binding} %{must} implement intefaces'
136
+ Includes_except: '%{binding} %{must} include mixins distinct from %{target}'
137
+ Includes_like: '%{binding} %{must} include a mixin similar to %{target}'
138
+ Includes_named: '%{binding} %{must} include the %{target} mixin'
139
+ Includes: '%{binding} %{must} include mixins'
140
+ Instantiates_except: '%{binding} %{must} instantiate classes distinct from %{target}'
141
+ Instantiates_like: '%{binding} %{must} instantiate classes like %{target}'
142
+ Instantiates_named: '%{binding} %{must} instantiate %{target}'
143
+ Instantiates: '%{binding} %{must} instantiate objects'
144
+ IsLongCode: '%{binding} is too long'
145
+ OverridesEqualOrHashButNotBoth: '%{binding} overrides <i>equals</i> or <i>hash</i> methods, but not both'
146
+ Raises_except: '%{binding} %{must} throw exceptions distinct from %{target}'
147
+ Raises_like: '%{binding} %{must} throw exceptions like %{target}'
148
+ Raises_named: '%{binding} %{must} throw %{target}'
149
+ Raises: '%{binding} %{must} throw exceptions'
150
+ Returns: '%{binding} %{must} return%{matching}'
151
+ ReturnsNil: '%{binding} retuns <i>%{keyword_null}</i>, which is a bad practice'
152
+ ReturnsNull: '%{binding} retuns <i>%{keyword_null}</i>, which is a bad practice'
153
+ SourceContains_named: 'solution %{must} use %{target}'
154
+ SourceEquals_named: 'solution %{must} be equal to %{target}'
155
+ SourceEqualsIgnoreSpaces_named: 'solution %{must} be equal to %{target}'
156
+ SourceRepeats_named: 'solution %{must} use %{target} more than one time'
157
+ TypesAs_named: '%{binding} %{must} type as %{target}'
158
+ TypesAs: '%{binding} %{must} type'
159
+ TypesParameterAs_except: '%{binding} %{must} type parameters with a type distinct from %{target}'
160
+ TypesParameterAs_like: '%{binding} %{must} type parameters with a type similar to %{target}'
161
+ TypesParameterAs_named: '%{binding} %{must} type parameters with type %{target}'
162
+ TypesParameterAs: '%{binding} %{must} type parameters'
163
+ TypesReturnAs_named: '%{binding} %{must} type its return value as %{target}'
164
+ TypesReturnAs: '%{binding} %{must} type its return value'
165
+ Uses_except: '%{binding} %{must} delegate to something distinct from %{target}'
166
+ Uses_like: '%{binding} %{must} delegate to something similar to %{target}'
167
+ Uses_named: '%{binding} %{must} use %{target}'
168
+ Uses: '%{binding} %{must} delegate'
169
+ UsesAnonymousVariable: '%{binding} %{must} use an annonymous variable'
170
+ UsesComposition: '%{binding} %{must} use composition'
171
+ UsesComprehension: '%{binding} %{must} use comprehensions'
172
+ UsesConditional: '%{binding} %{must} use conditionals'
173
+ UsesCut: '%{binding} uses <i>!</li> operator, which is a bad practice'
174
+ UsesDyamicPolymorphism: '%{binding} %{must} use polymorphism'
175
+ UsesDynamicMethodOverload: '%{binding} %{must} use overload'
176
+ UsesFail: '%{binding} uses <i>%{keyword_fail}</li>, which is a bad practice'
177
+ UsesFindall: '%{binding} %{must} use <i>%{keyword_findall}</i>'
178
+ UsesForall: '%{binding} %{must} use <i>%{keyword_forall}</i>'
179
+ UsesForeach: '%{binding} %{must} use <i>%{keyword_foreach}</i>%{matching}'
180
+ UsesForLoop: '%{binding} %{must} use <i>%{keyword_for}</i>%{matching}'
181
+ UsesGuards: '%{binding} %{must} use guards%{matching}'
182
+ UsesIf: '%{binding} %{must} use <i>%{keyword_if}</i>%{matching}'
183
+ UsesLambda: '%{binding} %{must} use lambda expressions%{matching}'
184
+ UsesLogic: '%{binding} %{must} usar boolean expressions'
185
+ UsesLoop: '%{binding} %{must} use a loop%{matching}'
186
+ UsesMath: '%{binding} %{must} usar math expressions'
187
+ UsesMixin: '%{binding} %{must} use mixins'
188
+ UsesNot: '%{binding} %{must} use not'
189
+ UsesObjectComposition: '%{binding} %{must} use composition'
190
+ UsesPatternMatching: '%{binding} %{must} use pattern matching'
191
+ UsesRepeat: '%{binding} %{must} use <i>%{keyword_repeat}</i>%{matching}'
192
+ UsesRepeatOf: '%{binding} %{must} use <i>%{keyword_repeat}</i>'
193
+ UsesStaticMethodOverload: '%{binding} %{must} use overload'
194
+ UsesStaticPolymorphism: '%{binding} %{must} use polymorphism'
195
+ UsesSwitch: '%{binding} %{must} use a <i>%{keyword_switch}</i>'
196
+ UsesTemplateMethod: '%{binding} %{must} use a template method'
197
+ UsesUnificationOperator: '%{binding} uses the unification operator (=)'
198
+ UsesWhile: '%{binding} %{must} use <i>%{keyword_while}</i>%{matching}'
@@ -0,0 +1,215 @@
1
+ ---
2
+ es:
3
+ mulang:
4
+ expectation:
5
+ must_not: no debe
6
+ must: debe
7
+ solution: la solución
8
+ with_char: ' con el carácter <i>%{value}</i>'
9
+ with_false: ' con el valor <i>%{keyword_false}</i>'
10
+ with_literal: ' con un valor literal'
11
+ with_logic: ' con una expresión booleana'
12
+ with_math: 'con una expresión matemática'
13
+ with_nil: ' con <i>%{keyword_nil}</i>'
14
+ with_nonliteral: ' con una expresión no literal'
15
+ with_number: ' con el número <i>%{value}</i>'
16
+ with_string: ' con la cadena <i>%{value}</i>'
17
+ with_symbol: ' con el símbolo <i>%{value}</i>'
18
+ with_true: ' con el valor <i>%{keyword_true}</i>'
19
+ inspection:
20
+ Assigns_except: '%{binding} %{must} asignar a algo diferente a %{target}%{matching}'
21
+ Assigns_like: '%{binding} %{must} asignar algo parecido a %{target}%{matching}'
22
+ Assigns_named: '%{binding} %{must} asignar %{target}%{matching}'
23
+ Assigns: '%{binding} %{must} realizar asignaciones%{matching}'
24
+ Calls_except: '%{binding} %{must} delegar en algo diferente a %{target}%{matching}'
25
+ Calls_like: '%{binding} %{must} delegar en algo parecido a %{target}%{matching}'
26
+ Calls_named: '%{binding} %{must} utilizar %{target}%{matching}'
27
+ Calls: '%{binding} %{must} delegar%{matching}'
28
+ Declares_except: '%{binding} %{must} contener declaraciones distintas a %{target}'
29
+ Declares_like: '%{binding} %{must} declarar un identificador parecido a %{target}'
30
+ Declares_named: '%{binding} %{must} declarar %{target}'
31
+ Declares: '%{binding} %{must} contener declaraciones'
32
+ DeclaresAttribute_except: '%{binding} %{must} declarar atributos diferentes a %{target}%{matching}'
33
+ DeclaresAttribute_like: '%{binding} %{must} declarar un atributo parecido a %{target}%{matching}'
34
+ DeclaresAttribute_named: '%{binding} %{must} declarar un atributo %{target}%{matching}'
35
+ DeclaresAttribute: '%{binding} %{must} declarar atributos%{matching}'
36
+ DeclaresClass_except: '%{binding} %{must} declarar clases diferentes a %{target}'
37
+ DeclaresClass_like: '%{binding} %{must} declarar una clase parecida a %{target}'
38
+ DeclaresClass_named: '%{binding} %{must} declarar una clase %{target}'
39
+ DeclaresClass: '%{binding} %{must} declarar clases'
40
+ DeclaresComputation_except: '%{binding} %{must} declarar computaciones diferentes a %{target}'
41
+ DeclaresComputation_like: '%{binding} %{must} declarar una computación parecida a %{target}'
42
+ DeclaresComputation_named: '%{binding} %{must} declarar una computación %{target}'
43
+ DeclaresComputation: '%{binding} %{must} declarar computaciones'
44
+ DeclaresComputationWithArity0_named: '%{target} %{must} declarar cero parametros'
45
+ DeclaresComputationWithArity1_named: '%{target} %{must} tener un parámetro'
46
+ DeclaresComputationWithArity2_named: '%{target} %{must} tener dos parámetros'
47
+ DeclaresComputationWithArity3_named: '%{target} %{must} tener tres parámetros'
48
+ DeclaresComputationWithArity4_named: '%{target} %{must} tener cuatro parámetros'
49
+ DeclaresComputationWithArity5_named: '%{target} %{must} tener cinco parámetros'
50
+ DeclaresEntryPoint: '%{binding} %{must} declarar un punto de entrada%{matching}'
51
+ DeclaresEnumeration_except: '%{binding} %{must} declarar enumeraciones que no se llamen %{target}'
52
+ DeclaresEnumeration_like: '%{binding} %{must} declarar una enumeracion de nombre parecido a %{target}'
53
+ DeclaresEnumeration_named: '%{binding} %{must} declarar una enumeracion %{target}'
54
+ DeclaresEnumeration: '%{binding} %{must} declarar enumeraciones'
55
+ DeclaresFact_except: '%{binding} %{must} declarar hechos diferentes a %{target}'
56
+ DeclaresFact_like: '%{binding} %{must} declarar un hecho parecido a %{target}'
57
+ DeclaresFact_named: '%{binding} %{must} declarar un hecho %{target}'
58
+ DeclaresFact: '%{binding} %{must} declarar hechos'
59
+ DeclaresFunction_except: '%{binding} %{must} declarar funciones diferentes a %{target}%{matching}'
60
+ DeclaresFunction_like: '%{binding} %{must} declarar una función parecida a %{target}%{matching}'
61
+ DeclaresFunction_named: '%{binding} %{must} declarar una función %{target}%{matching}'
62
+ DeclaresFunction: '%{binding} %{must} debe declarar funciones%{matching}'
63
+ DeclaresInterface_except: '%{binding} %{must} declarar interfaces que no se llamen %{target}%{matching}'
64
+ DeclaresInterface_like: '%{binding} %{must} declarar una interfaz de nombre parecido a %{target}%{matching}'
65
+ DeclaresInterface_named: '%{binding} %{must} declarar una interfaz %{target}%{matching}'
66
+ DeclaresInterface: '%{binding} %{must} declarar interfaces%{matching}'
67
+ DeclaresMethod_except: '%{binding} %{must} declarar métodos diferentes a %{target}%{matching}'
68
+ DeclaresMethod_like: '%{binding} %{must} declarar un método parecido a %{target}%{matching}'
69
+ DeclaresMethod_named: '%{binding} %{must} declarar un método %{target}%{matching}'
70
+ DeclaresMethod: '%{binding} %{must} declarar métodos%{matching}'
71
+ DeclaresObject_except: '%{binding} %{must} declarar objetos diferentes a %{target}%{matching}'
72
+ DeclaresObject_like: '%{binding} %{must} declarar un objeto parecido a%{target}%{matching}'
73
+ DeclaresObject_named: '%{binding} %{must} declarar un objeto %{target}%{matching}'
74
+ DeclaresObject: '%{binding} %{must} declarar objetos%{matching}'
75
+ DeclaresPredicate_except: '%{binding} %{must} declarar predicados diferentes a %{target}%{matching}'
76
+ DeclaresPredicate_like: '%{binding} %{must} declarar un predicados parecido a %{target}%{matching}'
77
+ DeclaresPredicate_named: '%{binding} %{must} declarar un predicados %{target}%{matching}'
78
+ DeclaresPredicate: '%{binding} %{must} declarar predicados%{matching}'
79
+ DeclaresProcedure_except: '%{binding} %{must} declarar procedimientos diferentes a %{target}%{matching}'
80
+ DeclaresProcedure_like: '%{binding} %{must} declarar un procedimiento parecido a %{target}%{matching}'
81
+ DeclaresProcedure_named: '%{binding} %{must} declarar un procedimiento %{target}%{matching}'
82
+ DeclaresProcedure: '%{binding} %{must} declarar procedimientos%{matching}'
83
+ DeclaresRecursively_named: '%{target} %{must} estar declarado recursivamente'
84
+ DeclaresRule_except: '%{binding} %{must} declarar reglas diferentes a %{target}'
85
+ DeclaresRule_like: '%{binding} %{must} declarar una regla parecida a %{target}'
86
+ DeclaresRule_named: '%{binding} %{must} declarar una regla %{target}'
87
+ DeclaresRule: '%{binding} %{must} debe declarar reglas'
88
+ DeclaresStyle_except: '%{binding} %{must} declarar un estilo diferente a %{target}'
89
+ DeclaresStyle_like: '%{binding} %{must} declarar un estilo parecido a %{target}'
90
+ DeclaresStyle_named: '%{binding} %{must} declarar un estilo %{target}'
91
+ DeclaresStyle: '%{binding} %{must} declarar un estilo'
92
+ DeclaresSuperclass_except: '%{binding} %{must} declarar una superclase distinta de %{target}'
93
+ DeclaresSuperclass_like: '%{binding} %{must} declarar una superclase parecida a %{target}'
94
+ DeclaresSuperclass_named: '%{binding} %{must} declarar una superclase %{target}'
95
+ DeclaresSuperclass: '%{binding} %{must} declarar una superclase'
96
+ DeclaresTag_except: '%{binding} %{must} declarar un elemento diferente a %{target}'
97
+ DeclaresTag_like: '%{binding} %{must} declarar un elemento parecido a %{target}'
98
+ DeclaresTag_named: '%{binding} %{must} declarar un elemento %{target}'
99
+ DeclaresTag: '%{binding} %{must} declarar un elemento'
100
+ DeclaresTypeAlias_except: '%{binding} %{must} declarar sinónimos de tipo diferentes a %{target}'
101
+ DeclaresTypeAlias_like: '%{binding} %{must} declarar un sinónimo de tipo parecido a %{target}'
102
+ DeclaresTypeAlias_named: '%{binding} %{must} declarar un sinónimo de tipo %{target}'
103
+ DeclaresTypeAlias: '%{binding} %{must} declarar sinónimos de tipo'
104
+ DeclaresTypeSignature_except: '%{binding} %{must} declarar firmas de tipos diferentes a %{target}'
105
+ DeclaresTypeSignature_like: '%{binding} %{must} declarar una firma para algo parecido %{target}'
106
+ DeclaresTypeSignature_named: '%{binding} %{must} declarar una firma %{target}'
107
+ DeclaresTypeSignature: '%{binding} %{must} declarar firmas de tipos'
108
+ DeclaresVariable_except: '%{binding} %{must} declarar variables diferentes a %{target}%{matching}'
109
+ DeclaresVariable_like: '%{binding} %{must} declarar una variable parecida a %{target}%{matching}'
110
+ DeclaresVariable_named: '%{binding} %{must} declarar una variable %{target}%{matching}'
111
+ DeclaresVariable: '%{binding} %{must} debe declarar variables%{matching}'
112
+ DiscardsExceptions: '%{binding} está ignorando excepciones silenciosamiente'
113
+ DoesConsolePrint: '%{binding} está realizando impresiones por pantalla'
114
+ DoesNilTest: '%{binding} hace comparaciones contra <i>%{keyword_null}</i>'
115
+ DoesNullTest: '%{binding} hace comparaciones contra <i>%{keyword_null}</i>'
116
+ DoesTypeTest: '%{binding} hace comparaciones contra strings'
117
+ HasAssignmentReturn: '%{binding} devuelve el resultado de una asignación'
118
+ HasCodeDuplication: '%{binding} tiene código repetido'
119
+ HasEmptyIfBranches: '%{binding} tiene ramas de <i>%{keyword_if}</i> vacías'
120
+ HasLongParameterList: '%{binding} tiene demasiados parámetros. Te podría estar faltando una abstracción'
121
+ HasMisspelledBindings: '%{binding} está mal escrito. Revisá la ortografía y procurá no usar abreviaturas'
122
+ HasMisspelledIdentifiers: '%{binding} está mal escrito. Revisá la ortografía y procurá no usar abreviaturas'
123
+ HasRedundantBooleanComparison: '%{binding} hace comparaciones booleanas innecesarias'
124
+ HasRedundantGuards: '%{binding} tiene guardas innecesarias'
125
+ HasRedundantIf: '%{binding} tiene ifs innecesarios'
126
+ HasRedundantLambda: '%{binding} tiene lambdas innecesarias'
127
+ HasRedundantLocalVariableReturn: '%{binding} usa variables locales innecesarias; podés retornar directamente la expresión'
128
+ HasRedundantParameter: '%{binding} tiene parámetros innecesarios (se pueden eliminar mediante point-free)'
129
+ HasRedundantReduction: '%{binding} usa <i>%{keyword_is}</i>, pero no realiza cálculos'
130
+ HasTooManyMethods: '%{binding} tiene demasiados métodos'
131
+ HasTooShortBindings: '%{binding} es un identificador muy corto'
132
+ HasTooShortIdentifiers: '%{binding} es un identificador muy corto'
133
+ HasUnreachableCode: '%{binding} tiene código inalcanzable'
134
+ HasWrongCaseBindings: '%{binding} no respeta la convención de nombres'
135
+ HasWrongCaseIdentifiers: '%{binding} no respeta la convención de nombres'
136
+ Implements_except: '%{binding} %{must} implementar interfaces distintas de %{target}'
137
+ Implements_like: '%{binding} %{must} implementar insterfaces parecidas a %{target}'
138
+ Implements_named: '%{binding} %{must} implementar %{target}'
139
+ Implements: '%{binding} %{must} implementar intefaces'
140
+ Includes_except: '%{binding} %{must} incluir mixins diferentes a %{target}'
141
+ Includes_like: '%{binding} %{must} incluir un mixin parecido a %{target}'
142
+ Includes_named: '%{binding} %{must} incluir el mixin %{target}'
143
+ Includes: '%{binding} %{must} incluir mixins'
144
+ Inherits_except: '%{binding} %{must} declarar una superclase distinta de %{target}'
145
+ Inherits_like: '%{binding} %{must} declarar una superclase parecida a %{target}'
146
+ Inherits_named: '%{binding} %{must} declarar una superclase %{target}'
147
+ Inherits: '%{binding} %{must} declarar una superclase'
148
+ Instantiates_except: '%{binding} %{must} instanciar clases distintas de %{target}'
149
+ Instantiates_like: '%{binding} %{must} instanciar clases parecidas a %{target}'
150
+ Instantiates_named: '%{binding} %{must} instanciar %{target}'
151
+ Instantiates: '%{binding} %{must} instanciar objetos'
152
+ IsLongCode: '%{binding} es muy largo. Tratá de delegar más'
153
+ OverridesEqualOrHashButNotBoth: '%{binding} redefine los métodos <i>equals</i> o <i>hash</i>, pero no ambos'
154
+ Raises_except: '%{binding} %{must} lanzar excepciones diferentes a %{target}'
155
+ Raises_like: '%{binding} %{must} lanzar excepciones parecidas a %{target}'
156
+ Raises_named: '%{binding} %{must} lanzar %{target}'
157
+ Raises: '%{binding} %{must} lanzar excepciones'
158
+ Rescues_except: '%{binding} %{must} capturar excepciones diferentes a %{target}'
159
+ Rescues_like: '%{binding} %{must} capturar excepciones parecidas a %{target}'
160
+ Rescues_named: '%{binding} %{must} capturar %{target}'
161
+ Rescues: '%{binding} %{must} capturar excepciones'
162
+ Returns: '%{binding} %{must} retornar%{matching}'
163
+ ReturnsNil: '%{binding} retorna null, lo cual es una mala práctica'
164
+ ReturnsNull: '%{binding} retorna null, lo cual es una mala práctica'
165
+ SourceContains_named: 'la solución %{must} usar %{target}'
166
+ SourceEquals_named: 'la solución %{must} ser igual a %{target}'
167
+ SourceEqualsIgnoreSpaces_named: 'la solución %{must} ser igual a %{target}'
168
+ SourceRepeats_named: 'la solución %{must} usar %{target} más de una vez'
169
+ TypesAs_named: '%{binding} %{must} ser de tipo %{target}'
170
+ TypesAs: '%{binding} %{must} tipar'
171
+ TypesParameterAs_except: '%{binding} %{must} tipar parámetros con un tipo diferente a %{target}'
172
+ TypesParameterAs_like: '%{binding} %{must} tipar parámetros con un tipo parecido a %{target}'
173
+ TypesParameterAs_named: '%{binding} %{must} tipar parámetros con el tipo %{target}'
174
+ TypesParameterAs: '%{binding} %{must} tipar parámetros'
175
+ TypesReturnAs_named: '%{binding} %{must} tipar su valor de retorno como %{target}'
176
+ TypesReturnAs: '%{binding} %{must} tipar su valor de retorno'
177
+ Uses_except: '%{binding} %{must} delegar en algo diferente a %{target}'
178
+ Uses_like: '%{binding} %{must} delegar en algo parecido a %{target}'
179
+ Uses_named: '%{binding} %{must} utilizar %{target}'
180
+ Uses: '%{binding} %{must} delegar'
181
+ UsesAnonymousVariable: '%{binding} %{must} utilizar una variable anónima'
182
+ UsesComposition: '%{binding} %{must} usar composición'
183
+ UsesComprehension: '%{binding} %{must} emplear listas por comprensión'
184
+ UsesConditional: '%{binding} %{must} utilizar condicionales'
185
+ UsesCut: '%{binding} usa el operador !, lo cual es una mala práctica'
186
+ UsesDyamicPolymorphism: '%{binding} %{must} usar polimorfismo'
187
+ UsesDynamicMethodOverload: '%{binding} %{must} usar sobrecarga'
188
+ UsesExceptionHandling: '%{binding} %{must} realizar manejo de excepciones'
189
+ UsesExceptions: '%{binding} %{must} usar excepciones'
190
+ UsesFail: '%{binding} usa <i>%{keyword_fail}</li>, lo cual es una mala práctica'
191
+ UsesFindall: '%{binding} %{must} utilizar <i>%{keyword_findall}</i>'
192
+ UsesForall: '%{binding} %{must} utilizar <i>%{keyword_forall}</i>'
193
+ UsesForeach: '%{binding} %{must} usar <i>%{keyword_foreach}</i>%{matching}'
194
+ UsesForLoop: '%{binding} %{must} usar <i>%{keyword_for}</i>%{matching}'
195
+ UsesGuards: '%{binding} %{must} usar guardas%{matching}'
196
+ UsesIf: '%{binding} %{must} usar <i>%{keyword_if}</i>%{matching}'
197
+ UsesInheritance: '%{binding} %{must} usar herencia'
198
+ UsesLambda: '%{binding} %{must} emplear expresiones lambda%{matching}'
199
+ UsesLogic: '%{binding} %{must} usar expresiones booleanas'
200
+ UsesLoop: '%{binding} %{must} usar un bucle'
201
+ UsesMath: '%{binding} %{must} usar expresiones matemáticas'
202
+ UsesMixin: '%{binding} %{must} utilizar mixins'
203
+ UsesMixins: '%{binding} %{must} usar mixins'
204
+ UsesNot: '%{binding} %{must} utilizar <i>%{keyword_not}</i>'
205
+ UsesObjectComposition: '%{binding} %{must} usar composición'
206
+ UsesPatternMatching: '%{binding} %{must} utilizar pattern matching'
207
+ UsesRepeat: '%{binding} %{must} usar <i>%{keyword_repeat}</i>%{matching}'
208
+ UsesRepeatOf: '%{binding} %{must} usar un <i>%{keyword_repeat}</i> de %{target}'
209
+ UsesStaticMethodOverload: '%{binding} %{must} usar sobrecarga'
210
+ UsesStaticPolymorphism: '%{binding} %{must} usar polimorfismo'
211
+ UsesSwitch: '%{binding} %{must} utilizar un <i>%{keyword_switch}</i>'
212
+ UsesTemplateMethod: '%{binding} %{must} usar un método plantilla'
213
+ UsesUnificationOperator: '%{binding} usa el operador de unificación (=)'
214
+ UsesWhile: '%{binding} %{must} utilizar un <i>%{keyword_while}</i>'
215
+ UsesYield: '%{binding} %{must} utilizar un <i>%{keyword_yield}</i>'
@@ -0,0 +1,205 @@
1
+ ---
2
+ pt:
3
+ mulang:
4
+ expectation:
5
+ must_not: 'não deve'
6
+ must: 'deve'
7
+ solution: 'a solução'
8
+ with_char: ' com o caractere <i>%{value}</i>'
9
+ with_false: ' com o valor <i>%{keyword_false}</i>'
10
+ with_literal: ' com um valor literal'
11
+ with_logic: ' com uma expressão booleana'
12
+ with_math: ' com uma expressão matemática'
13
+ with_nil: ' com <i>%{keyword_nil}</i>'
14
+ with_nonliteral: ' com uma expressão não literal'
15
+ with_number: ' com o número <i>%{value}</i>'
16
+ with_string: ' com a string <i>%{value}</i>'
17
+ with_symbol: ' com o símbolo <i>%{value}</i>'
18
+ with_true: ' com o valor <i>%{keyword_true}</i>'
19
+ inspection:
20
+ Assigns_except: '%{binding} %{must} atribuir algo diferente a %{target}%{matching}'
21
+ Assigns_like: '%{binding} %{must} atribuir algo semelhante ao %{target}%{matching}'
22
+ Assigns_named: '%{binding} %{must} atribuir %{target}%{matching}'
23
+ Assigns: '%{binding} %{must} fazer atribuições%{matching}'
24
+ Calls_except: '%{binding} %{must} delegar algo diferente para %{target}%{matching}'
25
+ Calls_like: '%{binding} %{must} delegar algo semelhante ao %{target}%{matching}'
26
+ Calls_named: '%{binding} %{must} usar %{target}%{matching}'
27
+ Calls: '%{binding} %{must} delegate%{matching}'
28
+ Declares_except: '%{binding} %{must} contém instruções diferentes de %{target}'
29
+ Declares_like: '%{binding} %{must} declarar um identificador semelhante a %{target}'
30
+ Declares_named: '%{binding} %{must} declarar %{target}'
31
+ Declares: '%{binding} %{must} contém declarações'
32
+ DeclaresAttribute_except: '%{binding} %{must} declarar atributos diferentes de %{target}%{matching}'
33
+ DeclaresAttribute_like: '%{binding} %{must} declarar um atributo semelhante a %{target}%{matching}'
34
+ DeclaresAttribute_named: '%{binding} %{must} declarar um atributo %{target}%{matching}'
35
+ DeclaresAttribute: '%{binding} %{must} declarar atributos%{matching}'
36
+ DeclaresClass_except: '%{binding} %{must} declarar classes diferentes para %{target}'
37
+ DeclaresClass_like: '%{binding} %{must} declarar uma classe semelhante a %{target}'
38
+ DeclaresClass_named: '%{binding} %{must} declarar uma classe %{target}'
39
+ DeclaresClass: '%{binding} %{must} declarar classes'
40
+ DeclaresComputation_except: '%{binding} %{must} declarar cálculos diferentes de %{target}'
41
+ DeclaresComputation_like: '%{binding} %{must} declarar uma computação semelhante a %{target}'
42
+ DeclaresComputation_named: '%{binding} %{must} declarar uma computação %{target}'
43
+ DeclaresComputation: '%{binding} %{must} declarar cálculos'
44
+ DeclaresComputationWithArity0_named: '%{target} %{must} declarar parâmetros zero'
45
+ DeclaresComputationWithArity1_named: '%{target} %{must} tem um parâmetro'
46
+ DeclaresComputationWithArity2_named: '%{target} %{must} tem dois parâmetros'
47
+ DeclaresComputationWithArity3_named: '%{target} %{must} tem três parâmetros'
48
+ DeclaresComputationWithArity4_named: '%{target} %{must} tem quatro parâmetros'
49
+ DeclaresComputationWithArity5_named: '%{target} %{must} tem cinco parâmetros'
50
+ DeclaresEntryPoint: '%{binding} %{must} declarar um ponto de entrada%{matching}'
51
+ DeclaresEnumeration_except: '%{binding} %{must} declarar enumerações que não são chamadas %{target}'
52
+ DeclaresEnumeration_like: '%{binding} %{must} declarar uma enumeração de nome semelhante a %{target}'
53
+ DeclaresEnumeration_named: '%{binding} %{must} declarar uma enumeração %{target}'
54
+ DeclaresEnumeration: '%{binding} %{must} declarar enumerações'
55
+ DeclaresFact_except: '%{binding} %{must} declarar fatos diferentes de %{target}'
56
+ DeclaresFact_like: '%{binding} %{must} declarar um fato semelhante a %{target}'
57
+ DeclaresFact_named: '%{binding} %{must} declarar um fato %{target}'
58
+ DeclaresFact: '%{binding} %{must} declarar fatos'
59
+ DeclaresFunction_except: '%{binding} %{must} declarar funções diferentes de %{target}%{matching}'
60
+ DeclaresFunction_like: '%{binding} %{must} declarar uma função semelhante a %{target}%{matching}'
61
+ DeclaresFunction_named: '%{binding} %{must} declarar uma função %{target}%{matching}'
62
+ DeclaresFunction: '%{binding} %{must} deve declarar funções%{matching}'
63
+ DeclaresInterface_except: '%{binding} %{must} declarar interfaces que não são chamadas %{target}%{matching}'
64
+ DeclaresInterface_like: '%{binding} %{must} declarar uma interface de nome semelhante a %{target}%{matching}'
65
+ DeclaresInterface_named: '%{binding} %{must} declarar uma interface %{target}%{matching}'
66
+ DeclaresInterface: '%{binding} %{must} declarar interfaces%{matching}'
67
+ DeclaresMethod_except: '%{binding} %{must} declarar métodos diferentes de %{target}%{matching}'
68
+ DeclaresMethod_like: '%{binding} %{must} declarar um método semelhante a %{target}%{matching}'
69
+ DeclaresMethod_named: '%{binding} %{must} declarar um método %{target}%{matching}'
70
+ DeclaresMethod: '%{binding} %{must} declarar métodos%{matching}'
71
+ DeclaresObject_except: '%{binding} %{must} declarar objetos diferentes de %{target}%{matching}'
72
+ DeclaresObject_like: '%{binding} %{must} declarar um objeto semelhante a %{target}%{matching}'
73
+ DeclaresObject_named: '%{binding} %{must} declarar um objeto %{target}%{matching}'
74
+ DeclaresObject: '%{binding} %{must} declarar objetos%{matching}'
75
+ DeclaresPredicate_except: '%{binding} %{must} declarar predicados diferentes para %{target}%{matching}'
76
+ DeclaresPredicate_like: '%{binding} %{must} declarar um predicado semelhante ao %{target}%{matching}'
77
+ DeclaresPredicate_named: '%{binding} %{must} declarar um predicado %{target}%{matching}'
78
+ DeclaresPredicate: '%{binding} %{must} declarar predicados%{matching}'
79
+ DeclaresProcedure_except: '%{binding} %{must} declarar procedimentos diferentes de %{target}%{matching}'
80
+ DeclaresProcedure_like: '%{binding} %{must} declarar um procedimento semelhante a %{target}%{matching}'
81
+ DeclaresProcedure_named: '%{binding} %{must} declarar um procedimento %{target}%{matching}'
82
+ DeclaresProcedure: '%{binding} %{must} declarar procedimentos%{matching}'
83
+ DeclaresRecursively_named: '%{target} %{must} deve ser declarado recursivamente'
84
+ DeclaresRule_except: '%{binding} %{must} declarar regras diferentes de %{target}'
85
+ DeclaresRule_like: '%{binding} %{must} declarar uma regra semelhante a %{target}'
86
+ DeclaresRule_named: '%{binding} %{must} declarar uma regra %{target}'
87
+ DeclaresRule: '%{binding} %{must} deve declarar regras'
88
+ DeclaresStyle_except: '%{binding} %{must} declarar um estilo diferentes de %{target}'
89
+ DeclaresStyle_like: '%{binding} %{must} declarar um estilo semelhante a %{target}'
90
+ DeclaresStyle_named: '%{binding} %{must} declarar um estilo %{target}'
91
+ DeclaresStyle: '%{binding} %{must} declarar um estilo'
92
+ DeclaresSuperclass_except: '%{binding} %{must} declarar uma superclasse diferente de %{target}'
93
+ DeclaresSuperclass_like: '%{binding} %{must} declarar uma superclasse semelhante a %{target}'
94
+ DeclaresSuperclass_named: '%{binding} %{must} declarar uma superclasse %{target}'
95
+ DeclaresSuperclass: '%{binding} %{must} declarar uma superclasse'
96
+ DeclaresTag_except: '%{binding} %{must} declarar uma etiqueta diferente de %{target}'
97
+ DeclaresTag_like: '%{binding} %{must} declarar uma etiqueta similar a %{target}'
98
+ DeclaresTag_named: '%{binding} %{must} declarar uma etiqueta %{target}'
99
+ DeclaresTag: '%{binding} %{must} declarar uma etiqueta'
100
+ DeclaresTypeAlias_except: '%{binding} %{must} declarar sinônimos de tipo diferente de %{target}'
101
+ DeclaresTypeAlias_like: '%{binding} %{must} declarar um sinônimo de tipo similar a %{target}'
102
+ DeclaresTypeAlias_named: '%{binding} %{must} declarar um sinônimo do tipo %{target}'
103
+ DeclaresTypeAlias: '%{binding} %{must} declarar o tipo de sinônimos'
104
+ DeclaresTypeSignature_except: '%{binding} %{must} declarar assinaturas de tipos diferentes de %{target}'
105
+ DeclaresTypeSignature_like: '%{binding} %{must} declarar uma assinatura para algo semelhante %{target}'
106
+ DeclaresTypeSignature_named: '%{binding} %{must} declarar uma assinatura %{target}'
107
+ DeclaresTypeSignature: '%{binding} %{must} excluir assinaturas de tipo'
108
+ DeclaresVariable_except: '%{binding} %{must} declarar variáveis ​​diferentes de %{target}%{matching}'
109
+ DeclaresVariable_like: '%{binding} %{must} declarar uma variável semelhante a %{target}%{matching}'
110
+ DeclaresVariable_named: '%{binding} %{must} declarar uma variável %{target}%{matching}'
111
+ DeclaresVariable: '%{binding} %{must} deve declarar variáveis%{matching}'
112
+ DiscardsExceptions: '%{binding} está silenciosamente ignorando exceções'
113
+ DoesConsolePrint: '%{binding} está fazendo impressões na tela'
114
+ DoesNilTest: '%{binding} faz comparações contra <i>%{keyword_null}</i>'
115
+ DoesNullTest: '%{binding} faz comparações contra <i>%{keyword_null}</i>'
116
+ DoesTypeTest: '%{binding} faz comparações contra strings'
117
+ HasAssignmentReturn: '%{binding} retorna o resultado de uma tarefa'
118
+ HasCodeDuplication: '%{binding} tem código repetido'
119
+ HasEmptyIfBranches: '%{binding} tem vazio <i>%{keyword_if}</i> ramos'
120
+ HasLongParameterList: '%{binding} tem muitos parâmetros. Você pode estar perdendo uma abstração.'
121
+ HasMisspelledBindings: '%{binding} está incorreto. Verifique a ortografia e tente não usar abreviaturas'
122
+ HasMisspelledIdentifiers: '%{binding} está incorreto. Verifique a ortografia e tente não usar abreviaturas'
123
+ HasRedundantBooleanComparison: '%{binding} faz comparações booleanas desnecessárias'
124
+ HasRedundantGuards: '%{binding} possui protetores desnecessários'
125
+ HasRedundantIf: '%{binding} tem desnecessário ifs'
126
+ HasRedundantLambda: '%{binding} possui lambdas desnecessários'
127
+ HasRedundantLocalVariableReturn: '%{binding} usa variáveis ​​locais desnecessárias; você pode retornar a expressão diretamente'
128
+ HasRedundantParameter: '%{binding} possui parâmetros desnecessários (pode ser removido por ponto-livre)'
129
+ HasRedundantReduction: '%{binding} usa <i>%{keyword_is}</i>, mas não executa cálculos'
130
+ HasTooManyMethods: '%{binding} tem muitos métodos'
131
+ HasTooShortBindings: '%{binding} é um identificador muito curto'
132
+ HasTooShortIdentifiers: '%{binding} é um identificador muito curto'
133
+ HasUnreachableCode: '%{binding} tem código inacessível'
134
+ HasWrongCaseBindings: '%{binding} não respeita a convenção de nomenclatura'
135
+ HasWrongCaseIdentifiers: '%{binding} não respeita a convenção de nomenclatura'
136
+ Implements_except: '%{binding} %{must} implementar interfaces diferentes de %{target}'
137
+ Implements_like: '%{binding} %{must} implementar interfaces semelhantes a %{target}'
138
+ Implements_named: '%{binding} %{must} implementar %{target}'
139
+ Implements: '%{binding} %{must} implementar interfaces'
140
+ Inherits_except: '%{binding} %{must} declarar uma superclasse diferente de %{target}'
141
+ Inherits_like: '%{binding} %{must} declarar uma superclasse semelhante a %{target}'
142
+ Inherits_named: '%{binding} %{must} declarar uma superclasse %{target}'
143
+ Inherits: '%{binding} %{must} declarar uma superclasse'
144
+ Instantiates_except: '%{binding} %{must} instanciar classes diferentes de %{target}'
145
+ Instantiates_like: '%{binding} %{must} instanciar classes semelhantes a %{target}'
146
+ Instantiates_named: '%{binding} %{must} instantiate %{target}'
147
+ Instantiates: '%{binding} %{must} instanciar objetos'
148
+ IsLongCode: '%{binding} é muito longo. Tente delegar mais'
149
+ OverridesEqualOrHashButNotBoth: '%{binding} redefine os métodos <i>equals</i> ou <i>hash </i>, mas não ambos'
150
+ Raises_except: '%{binding} %{must} lançar exceções diferentes de %{target}'
151
+ Raises_like: '%{binding} %{must} lançar exceções semelhantes a %{target}'
152
+ Raises_named: '%{binding} %{must} launch %{target}'
153
+ Raises: '%{binding} %{must} lançar exceções'
154
+ Rescues_except: '%{binding} %{must} capturar exceções que não sejam %{target}'
155
+ Rescues_like: '%{binding} %{must} capturar exceções semelhantes a %{target}'
156
+ Rescues_named: '%{binding} %{must} capture %{target}'
157
+ Rescues: '%{binding} %{must} capturar exceções'
158
+ Returns: '%{binding} %{must} retornar%{matching}'
159
+ ReturnsNil: '%{binding} retorna nulo, o que é uma prática ruim'
160
+ ReturnsNull: '%{binding} retorna nulo, o que é uma prática ruim'
161
+ SourceContains_named: 'a solução %{must} usar %{target}'
162
+ SourceEquals_named: 'a solução %{must} ser igual a %{target}'
163
+ SourceEqualsIgnoreSpaces_named: 'a solução %{must} ser igual a %{target}'
164
+ SourceRepeats_named: 'a solução %{must} usar %{target} mais de uma vez'
165
+ TypesAs_named: '%{binding} %{must} é do tipo %{target}'
166
+ TypesAs: '%{binding} %{must} tem tipo'
167
+ TypesReturnAs_named: '%{binding} %{must} tem tipo de valor de retorno %{target}'
168
+ TypesReturnAs: '%{binding} %{must} tem tipo de valor de retorno'
169
+ Uses_except: '%{binding} %{must} delegar algo diferente para %{target}'
170
+ Uses_like: '%{binding} %{must} delegar algo semelhante ao %{target}'
171
+ Uses_named: '%{binding} %{must} usar %{target}'
172
+ Uses: '%{binding} %{must} delegar'
173
+ UsesAnonymousVariable: '%{binding} %{must} usar uma variável anônima'
174
+ UsesComposition: '%{binding} %{must} usar a composição'
175
+ UsesComprehension: '%{binding} %{must} usar listas pelo entendimento'
176
+ UsesConditional: '%{binding} %{must} usar conditional'
177
+ UsesCut: '%{binding} usa o operador !, que é uma má prática'
178
+ UsesDyamicPolymorphism: '%{binding} %{must} usar polimorfismo'
179
+ UsesDynamicMethodOverload: '%{binding} %{must} usar sobrecarga'
180
+ UsesExceptionHandling: '%{binding} %{must} executar o tratamento de exceção'
181
+ UsesExceptions: '%{binding} %{must} usar exceções'
182
+ UsesFail: '%{binding} usa <i>%{keyword_fail}</li>, o que é uma prática ruim'
183
+ UsesFindall: '%{binding} %{must} usar <i>%{keyword_findall}</i>'
184
+ UsesForall: '%{binding} %{must} usar <i>%{keyword_forall}</i>'
185
+ UsesFor: '%{binding} %{must} usar <i>%{keyword_for}</i>%{matching}'
186
+ UsesForeach: '%{binding} %{must} usar <i>%{keyword_foreach}</i>%{matching}'
187
+ UsesGuards: '%{binding} %{must} usar guardas%{matching}'
188
+ UsesIf: '%{binding} %{must} usar <i>%{keyword_if}</i>%{matching}'
189
+ UsesInheritance: '%{binding} %{must} usar herança'
190
+ UsesLambda: '%{binding} %{must} usar expressões lambda%{matching}'
191
+ UsesLoop: '%{binding} %{must} usar um loop%{matching}'
192
+ UsesLogic: '%{binding} %{must} usar expressões booleanas'
193
+ UsesMath: '%{binding} %{must} usar expressões matemáticas'
194
+ UsesMixins: '%{binding} %{must} usar mixins'
195
+ UsesNot: '%{binding} %{must} usar <i>%{keyword_not}</i>'
196
+ UsesObjectComposition: '%{binding} %{must} usar composição'
197
+ UsesPatternMatching: '%{binding} %{must} usar o padrão de correspondência'
198
+ UsesRepeat: '%{binding} %{must} usar <i>%{keyword_repeat}</i>%{matching}'
199
+ UsesRepeatOf: '%{binding} %{must} usar uma <i>%{keyword_repeat}</i> de %{target}'
200
+ UsesStaticMethodOverload: '%{binding} %{must} usar sobrecarga'
201
+ UsesStaticPolymorphism: '%{binding} %{must} usar polimorfismo'
202
+ UsesSwitch: '%{binding} %{must} usar um <i>%{keyword_switch}</i>'
203
+ UsesTemplateMethod: '%{binding} %{must} usar um _template method_'
204
+ UsesUnificationOperator: '%{binding} usa o operador de unificação (=)'
205
+ UsesWhile: '%{binding} %{must} usar um <i>%{keyword_while}</i>%{matching}'
@@ -1,8 +1,10 @@
1
- require 'active_support/all'
1
+ require 'mumukit/core'
2
2
  require 'open3'
3
3
 
4
4
  require_relative './mulang/version'
5
5
 
6
+ I18n.load_translations_path File.join(__dir__, 'locales', '*.yml')
7
+
6
8
  module Mulang
7
9
  def self.bin_path
8
10
  File.join(__dir__, '..', 'bin', 'mulang')
@@ -16,5 +18,7 @@ module Mulang
16
18
  end
17
19
  end
18
20
 
21
+ require_relative './mulang/inspection'
22
+ require_relative './mulang/expectation'
19
23
  require_relative './mulang/code'
20
24
  require_relative './mulang/language'
@@ -21,10 +21,29 @@ module Mulang
21
21
  Mulang.analyse analysis(spec)
22
22
  end
23
23
 
24
+ def expect(binding='*', inspection)
25
+ expectation = {binding: binding, inspection: inspection}
26
+ Mulang::Expectation.parse expectation
27
+ expectation_results_for(analyse(expectations: [expectation])).first['result']
28
+ end
29
+
30
+ def custom_expect(edl)
31
+ expectation_results_for(analyse(customExpectations: edl))
32
+ .map { |e| [e['expectation']['inspection'], e['result']] }
33
+ .to_h
34
+ end
35
+
36
+ alias query expect
37
+ alias custom_query custom_expect
38
+
24
39
  def self.native(language_name, content)
25
40
  new Mulang::Language::Native.new(language_name), content
26
41
  end
27
42
 
43
+ def self.native!(*args)
44
+ native(*args).tap { |it| it.expect('Parses') }
45
+ end
46
+
28
47
  def self.external(content, &tool)
29
48
  new Mulang::Language::External.new(&tool), content
30
49
  end
@@ -32,5 +51,12 @@ module Mulang
32
51
  def self.ast(ast)
33
52
  new Mulang::Language::External.new, ast
34
53
  end
54
+
55
+ private
56
+
57
+ def expectation_results_for(result)
58
+ raise result['reason'] if result['tag'] == 'AnalysisFailed'
59
+ result['expectationResults']
60
+ end
35
61
  end
36
62
  end
@@ -0,0 +1,113 @@
1
+ class Mulang::Expectation
2
+
3
+ SMELLS = %w(DiscardsExceptions DoesConsolePrint DoesNilTest DoesNullTest DoesTypeTest
4
+ HasAssignmentReturn HasCodeDuplication HasEmptyIfBranches HasLongParameterList
5
+ HasMisspelledBindings HasMisspelledIdentifiers
6
+ HasRedundantBooleanComparison HasRedundantGuards HasRedundantIf
7
+ HasRedundantLambda HasRedundantLocalVariableReturn HasRedundantParameter
8
+ HasRedundantReduction HasTooManyMethods HasTooShortBindings HasTooShortIdentifiers HasUnreachableCode
9
+ HasWrongCaseBinding HasWrongCaseIdentifiers IsLongCode OverridesEqualOrHashButNotBoth
10
+ ReturnsNil ReturnsNull UsesCut UsesFail UsesUnificationOperator)
11
+
12
+ attr_accessor :binding, :inspection
13
+
14
+ def initialize(binding, inspection)
15
+ @binding = binding
16
+ @inspection = inspection
17
+ end
18
+
19
+ def check!
20
+ raise "Wrong binding in #{to_h}" unless binding?
21
+ raise "Wrong inspection #{to_h}" unless inspection?
22
+ end
23
+
24
+ def translate(keywords = nil)
25
+ Mulang::Expectation::I18n.translate self, keywords
26
+ end
27
+
28
+ def to_h
29
+ {binding: binding, inspection: inspection.to_s}
30
+ end
31
+
32
+ def self.guess_type(expectation)
33
+ if expectation[:inspection] =~ /(Not\:)?Has.*/ && !has_smell?(expectation[:inspection])
34
+ V0
35
+ else
36
+ V2
37
+ end
38
+ end
39
+
40
+ def self.has_smell?(smell)
41
+ SMELLS.include? smell
42
+ end
43
+
44
+ def self.parse(expectation)
45
+ guess_type(expectation).new(
46
+ expectation[:binding],
47
+ Mulang::Inspection.parse(expectation[:inspection]))
48
+ end
49
+
50
+ def self.valid?(expectation)
51
+ !!Mulang::Inspection.parse(expectation['inspection']) rescue false
52
+ end
53
+
54
+ class V0 < Mulang::Expectation
55
+ INSPECTIONS = %w(HasBinding HasTypeDeclaration HasTypeSignature HasVariable HasArity HasDirectRecursion
56
+ HasComposition HasComprehension HasForeach HasIf HasGuards HasConditional HasLambda HasRepeat HasWhile
57
+ HasUsage HasAnonymousVariable HasNot HasForall HasFindall)
58
+
59
+
60
+ def binding?
61
+ binding.present?
62
+ end
63
+
64
+ def inspection?
65
+ inspection.present? && INSPECTIONS.include?(inspection.type)
66
+ end
67
+
68
+ def as_v2
69
+ if has? 'Binding' then as_v2_declare ''
70
+ elsif has? 'TypeDeclaration' then as_v2_declare 'TypeAlias'
71
+ elsif has? 'TypeSignature' then as_v2_declare 'TypeSignature'
72
+ elsif has? 'Variable' then as_v2_declare 'Variable'
73
+ elsif has? 'Arity' then as_v2_declare "ComputationWithArity#{inspection.target.value}"
74
+ elsif has? 'DirectRecursion' then as_v2_declare "Recursively"
75
+ elsif has? 'Usage'
76
+ V2.new binding, new_inspection('Uses', Mulang::Inspection::Target.named(inspection.target.value))
77
+ else as_v2_use
78
+ end
79
+ end
80
+
81
+ def has?(simple_type)
82
+ inspection.type == "Has#{simple_type}"
83
+ end
84
+
85
+ def as_v2_use
86
+ V2.new binding, new_inspection(inspection.type.gsub('Has', 'Uses'), nil)
87
+ end
88
+
89
+ def as_v2_declare(simple_type)
90
+ V2.new '*', new_inspection("Declares#{simple_type}", Mulang::Inspection::Target.named(binding))
91
+ end
92
+
93
+ def new_inspection(type, target)
94
+ Mulang::Inspection.new(type, target, negated: inspection.negated?)
95
+ end
96
+ end
97
+
98
+ class V2 < Mulang::Expectation
99
+ def binding?
100
+ true
101
+ end
102
+
103
+ def inspection?
104
+ true
105
+ end
106
+
107
+ def as_v2
108
+ self
109
+ end
110
+ end
111
+ end
112
+
113
+ require_relative './expectation/i18n'
@@ -0,0 +1,65 @@
1
+ module Mulang::Expectation::I18n
2
+ class << self
3
+ DEFAULT_KEYWORDS = {
4
+ keyword_fail: :fail,
5
+ keyword_false: :false,
6
+ keyword_findall: :findall,
7
+ keyword_for: :for,
8
+ keyword_forall: :forall,
9
+ keyword_foreach: :foreach,
10
+ keyword_if: :if,
11
+ keyword_is: :is,
12
+ keyword_not: :not,
13
+ keyword_null: :null,
14
+ keyword_repeat: :repeat,
15
+ keyword_switch: :switch,
16
+ keyword_true: :true,
17
+ keyword_while: :while,
18
+ keyword_yield: :yield
19
+ }
20
+
21
+ def translate(e, keywords = nil)
22
+ e = e.as_v2
23
+ key = key_for e.binding, e.inspection
24
+ ::I18n.t key, translation_params(e, keywords)
25
+ rescue
26
+ '<unknown expectation>'
27
+ end
28
+
29
+ alias t translate
30
+
31
+ private
32
+
33
+ def translation_params(e, keywords)
34
+ with_keywords keywords,
35
+ binding: t_binding(e.binding),
36
+ target: t_target(e.inspection),
37
+ must: t_must(e.inspection),
38
+ matching: t_matching(keywords, e.inspection)
39
+ end
40
+
41
+ def key_for(binding, inspection)
42
+ "mulang.inspection.#{inspection.type}#{inspection.target ? inspection.target.i18n_suffix : nil}"
43
+ end
44
+
45
+ def t_binding(binding)
46
+ binding == '*' ? ::I18n.t("mulang.expectation.solution") : "<strong>#{Mulang::Inspection.parse_binding_name binding}</strong>"
47
+ end
48
+
49
+ def t_must(parsed)
50
+ ::I18n.t("mulang.expectation.#{parsed.negated? ? 'must_not' : 'must' }")
51
+ end
52
+
53
+ def t_target(parsed)
54
+ "<strong>#{parsed.target.value}</strong>" if parsed.target
55
+ end
56
+
57
+ def t_matching(keywords, parsed)
58
+ ::I18n.t("mulang.expectation.#{parsed.matcher.type}", with_keywords(keywords, value: parsed.matcher.value)) if parsed.matcher
59
+ end
60
+
61
+ def with_keywords(keywords, params)
62
+ params.merge(DEFAULT_KEYWORDS).merge(keywords || {})
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,63 @@
1
+ module Mulang
2
+ class Inspection
3
+ module Compacted
4
+ def as_json(*args)
5
+ super(*args).compact
6
+ end
7
+ end
8
+
9
+ include Mulang::Inspection::Compacted
10
+
11
+ REGEXP = Regexp.new %q{
12
+ ^(?<negation>Not:)?
13
+ (?<type>[^:]+)
14
+ (
15
+ :(?<matcher>WithLiteral|WithNonliteral|WithLogic|WithMath|WithFalse|WithNil|WithTrue) |
16
+ :(?<matcher>WithChar|WithNumber|WithString|WithSymbol):(?<value>[^:]+) |
17
+ :(?<target>[^:]+)(:(?<matcher>[^:]+)(:(?<value>[^:]+))?)?
18
+ )?$}.gsub(/\s/, '')
19
+
20
+ attr_accessor :type, :target, :matcher, :negated
21
+ alias negated? negated
22
+
23
+ def initialize(type, target, negated: false, matcher: nil)
24
+ @type = type
25
+ @target = target
26
+ @negated = negated
27
+ @matcher = matcher
28
+ end
29
+
30
+ def to_s
31
+ "#{negated_to_s}#{type}#{target_to_s}"
32
+ end
33
+
34
+ def negated_to_s
35
+ negated ? 'Not:' : nil
36
+ end
37
+
38
+ def target_to_s
39
+ target ? ":#{target.to_s}" : nil
40
+ end
41
+
42
+ def self.parse_binding_name(binding_s)
43
+ if binding_s.start_with? 'Intransitive:'
44
+ binding_s[13..-1]
45
+ else
46
+ binding_s
47
+ end
48
+ end
49
+
50
+ def self.parse(inspection_s)
51
+ match = REGEXP.match inspection_s
52
+ raise "Invalid inspection #{inspection_s}" unless match
53
+ Inspection.new(
54
+ match['type'],
55
+ Mulang::Inspection::Target.parse(match['target']),
56
+ matcher: Mulang::Inspection::Matcher.parse(match['matcher'], match['value']),
57
+ negated: match['negation'].present?)
58
+ end
59
+ end
60
+ end
61
+
62
+ require_relative './inspection/target'
63
+ require_relative './inspection/matcher'
@@ -0,0 +1,18 @@
1
+ class Mulang::Inspection::Matcher
2
+ include Mulang::Inspection::Compacted
3
+
4
+ TYPES = %w(WithChar WithFalse WithLiteral WithLogic WithMath WithNil WithNonliteral WithNumber WithString WithSymbol WithTrue)
5
+
6
+ attr_accessor :type, :value
7
+
8
+ def initialize(type, value=nil)
9
+ @type = type
10
+ @value = value
11
+ end
12
+
13
+ def self.parse(type, value)
14
+ return nil unless type
15
+ raise "Invalid matcher #{type}" unless type.in? TYPES
16
+ new type.underscore.to_sym, value
17
+ end
18
+ end
@@ -0,0 +1,70 @@
1
+ class Mulang::Inspection::Target
2
+ include Mulang::Inspection::Compacted
3
+
4
+ attr_accessor :type, :value
5
+
6
+ def initialize(type, value=nil)
7
+ @type = type
8
+ @value = value
9
+ end
10
+
11
+ def self.parse(target_s)
12
+ if target_s.blank?
13
+ nil
14
+ elsif target_s == '*'
15
+ anyone
16
+ elsif target_s.start_with? '^'
17
+ new :except, target_tail(target_s)
18
+ elsif target_s.start_with? '~'
19
+ new :like, target_tail(target_s)
20
+ elsif target_s.start_with? '='
21
+ named target_tail(target_s)
22
+ else
23
+ unknown target_s
24
+ end
25
+ end
26
+
27
+ def to_s
28
+ case type
29
+ when :anyone
30
+ '*'
31
+ when :except
32
+ "^#{value}"
33
+ when :like
34
+ "~#{value}"
35
+ when :named
36
+ "=#{value}"
37
+ else
38
+ value
39
+ end
40
+ end
41
+
42
+ def i18n_suffix
43
+ case type
44
+ when :anyone
45
+ nil
46
+ when :except
47
+ "_except"
48
+ when :like
49
+ "_like"
50
+ else
51
+ "_named"
52
+ end
53
+ end
54
+
55
+ def self.target_tail(target_s)
56
+ target_s[1..-1]
57
+ end
58
+
59
+ def self.unknown(value)
60
+ new(:unknown, value)
61
+ end
62
+
63
+ def self.named(value)
64
+ new(:named, value)
65
+ end
66
+
67
+ def self.anyone
68
+ new(:anyone)
69
+ end
70
+ end
@@ -1,4 +1,4 @@
1
1
  module Mulang
2
- VERSION = "4.5.3"
3
- MULANG_VERSION = "4.5.3"
2
+ VERSION = "5.0.0"
3
+ MULANG_VERSION = "5.0.0"
4
4
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mulang
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.3
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Bulgarelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-23 00:00:00.000000000 Z
11
+ date: 2019-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: mumukit-core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">"
18
25
  - !ruby/object:Gem::Version
19
- version: '1.15'
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: codeclimate-test-reporter
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '1.15'
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: activesupport
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -76,8 +90,16 @@ files:
76
90
  - bin/console
77
91
  - bin/mulang
78
92
  - bin/setup
93
+ - lib/locales/en.yml
94
+ - lib/locales/es.yml
95
+ - lib/locales/pt.yml
79
96
  - lib/mulang.rb
80
97
  - lib/mulang/code.rb
98
+ - lib/mulang/expectation.rb
99
+ - lib/mulang/expectation/i18n.rb
100
+ - lib/mulang/inspection.rb
101
+ - lib/mulang/inspection/matcher.rb
102
+ - lib/mulang/inspection/target.rb
81
103
  - lib/mulang/language.rb
82
104
  - lib/mulang/version.rb
83
105
  homepage: https://github.com/mumuki/mulang
@@ -100,7 +122,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
122
  - !ruby/object:Gem::Version
101
123
  version: '0'
102
124
  requirements: []
103
- rubygems_version: 3.0.4
125
+ rubyforge_project:
126
+ rubygems_version: 2.7.7
104
127
  signing_key:
105
128
  specification_version: 4
106
129
  summary: Gem wrapper for mulang tool