mulang 4.5.3 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
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