mumukit-inspection 1.0.0 → 2.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 +4 -4
- data/lib/locales/en.yml +104 -23
- data/lib/locales/es.yml +99 -18
- data/lib/mumukit/inspection.rb +24 -59
- data/lib/mumukit/inspection/expectation.rb +93 -0
- data/lib/mumukit/inspection/i18n.rb +25 -29
- data/lib/mumukit/inspection/target.rb +68 -0
- data/lib/mumukit/inspection/version.rb +2 -2
- metadata +14 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 862d0aaea9f5338ca16507bc3f564870f093ecf4
|
4
|
+
data.tar.gz: bb8724791a6303e935aaef57cfa6fe1ba79ee589
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c47373f1be4e7b0b4324d0c5e0f9b50a861b9b3e825fcb0422276744fec26a8a40d8b9ef076ace3ad5654019a847fa75b85df289760e6365c875f2d8faa76bd
|
7
|
+
data.tar.gz: 5db7fe22cbf62ce8a682de124b213362456e67b79081927863d69396961ad4beb4ac105a0aeeec189cfc718350e06d790ca5c374c15f9f6fb7be33024658e9db
|
data/lib/locales/en.yml
CHANGED
@@ -1,27 +1,108 @@
|
|
1
1
|
---
|
2
2
|
en:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
3
|
+
expectation_Declares: '%{binding} %{must} contain declarations'
|
4
|
+
expectation_Declares_except: '%{binding} %{must} contain declarations distinct from %{target}'
|
5
|
+
expectation_Declares_like: '%{binding} %{must} declare an identifier similar to %{target}'
|
6
|
+
expectation_Declares_named: '%{binding} %{must} declare %{target}'
|
7
|
+
expectation_DeclaresAttribute: '%{binding} %{must} declare attributes'
|
8
|
+
expectation_DeclaresAttribute_except: '%{binding} %{must} declare attributes distinct from %{target}'
|
9
|
+
expectation_DeclaresAttribute_like: '%{binding} %{must} declare an attribute similar to %{target}'
|
10
|
+
expectation_DeclaresAttribute_named: '%{binding} %{must} declare an attribute %{target}'
|
11
|
+
expectation_DeclaresClass: '%{binding} %{must} declare classes'
|
12
|
+
expectation_DeclaresClass_except: '%{binding} %{must} declare classes distinct from %{target}'
|
13
|
+
expectation_DeclaresClass_like: '%{binding} %{must} declare a class similar to %{target}'
|
14
|
+
expectation_DeclaresClass_named: '%{binding} %{must} declare a class %{target}'
|
15
|
+
expectation_DeclaresComputation: '%{binding} %{must} declare computations'
|
16
|
+
expectation_DeclaresComputation_except: '%{binding} %{must} declare computations distinct from %{target}'
|
17
|
+
expectation_DeclaresComputation_like: '%{binding} %{must} declare a computation similar to %{target}'
|
18
|
+
expectation_DeclaresComputation_named: '%{binding} %{must} declare a computation %{target}'
|
19
|
+
expectation_DeclaresComputationWithArity0_named: '%{target} %{must} have zero parameters'
|
20
|
+
expectation_DeclaresComputationWithArity1_named: '%{target} %{must} have one parameter'
|
21
|
+
expectation_DeclaresComputationWithArity2_named: '%{target} %{must} have 2 parameters'
|
22
|
+
expectation_DeclaresComputationWithArity3_named: '%{target} %{must} have 3 parameters'
|
23
|
+
expectation_DeclaresComputationWithArity4_named: '%{target} %{must} have 4 parameters'
|
24
|
+
expectation_DeclaresComputationWithArity5_named: '%{target} %{must} have 5 parameters'
|
25
|
+
expectation_DeclaresEntryPoint: '%{binding} %{must} declare an entry point'
|
26
|
+
expectation_DeclaresFact: '%{binding} %{must} declare facts'
|
27
|
+
expectation_DeclaresFact_except: '%{binding} %{must} declare facts distinct from %{target}'
|
28
|
+
expectation_DeclaresFact_like: '%{binding} %{must} declare a fact similar to %{target}'
|
29
|
+
expectation_DeclaresFact_named: '%{binding} %{must} declare a fact %{target}'
|
30
|
+
expectation_DeclaresFunction: '%{binding} %{must} debe declare functions'
|
31
|
+
expectation_DeclaresFunction_except: '%{binding} %{must} declare functions distinct from %{target}'
|
32
|
+
expectation_DeclaresFunction_like: '%{binding} %{must} declare a function similar to %{target}'
|
33
|
+
expectation_DeclaresFunction_named: '%{binding} %{must} declare a function %{target}'
|
34
|
+
expectation_DeclaresMethod: '%{binding} %{must} declare methods'
|
35
|
+
expectation_DeclaresMethod_except: '%{binding} %{must} declare methods distinct from %{target}'
|
36
|
+
expectation_DeclaresMethod_like: '%{binding} %{must} declare a method similar to %{target}'
|
37
|
+
expectation_DeclaresMethod_named: '%{binding} %{must} declare a method %{target}'
|
38
|
+
expectation_DeclaresObject: '%{binding} %{must} declare objects'
|
39
|
+
expectation_DeclaresObject_except: '%{binding} %{must} declare objects distinct from %{target}'
|
40
|
+
expectation_DeclaresObject_like: '%{binding} %{must} declare an object similar to %{target}'
|
41
|
+
expectation_DeclaresObject_named: '%{binding} %{must} declare an object %{target}'
|
42
|
+
expectation_DeclaresPredicate: '%{binding} %{must} declare predicates'
|
43
|
+
expectation_DeclaresPredicate_except: '%{binding} %{must} declare a predicate distinct from %{target}'
|
44
|
+
expectation_DeclaresPredicate_like: '%{binding} %{must} declare a predicate similar to %{target}'
|
45
|
+
expectation_DeclaresPredicate_named: '%{binding} %{must} declare predicates %{target}'
|
46
|
+
expectation_DeclaresProcedure: '%{binding} %{must} declare procedures'
|
47
|
+
expectation_DeclaresProcedure_except: '%{binding} %{must} declare procedures distinct from %{target}'
|
48
|
+
expectation_DeclaresProcedure_like: '%{binding} %{must} declare a procedure similar to %{target}'
|
49
|
+
expectation_DeclaresProcedure_named: '%{binding} %{must} declare a procedure %{target}'
|
50
|
+
expectation_DeclaresRecursively_named: '%{target} %{must} declared recursively'
|
51
|
+
expectation_DeclaresRule: '%{binding} %{must} debe declare rules'
|
52
|
+
expectation_DeclaresRule_except: '%{binding} %{must} declare rules distinct from %{target}'
|
53
|
+
expectation_DeclaresRule_like: '%{binding} %{must} declare a rule similar to %{target}'
|
54
|
+
expectation_DeclaresRule_named: '%{binding} %{must} declare a rule %{target}'
|
55
|
+
expectation_DeclaresTypeAlias: '%{binding} %{must} declare type aliases'
|
56
|
+
expectation_DeclaresTypeAlias_except: '%{binding} %{must} declare type aliases distinct from %{target}'
|
57
|
+
expectation_DeclaresTypeAlias_like: '%{binding} %{must} declare a type alias similar to %{target}'
|
58
|
+
expectation_DeclaresTypeAlias_named: '%{binding} %{must} declare a type alias %{target}'
|
59
|
+
expectation_DeclaresTypeSignature: '%{binding} %{must} decarar type signatures'
|
60
|
+
expectation_DeclaresTypeSignature_except: '%{binding} %{must} declare a type signature distinct from %{target}'
|
61
|
+
expectation_DeclaresTypeSignature_like: '%{binding} %{must} declare a type signature for something like %{target}'
|
62
|
+
expectation_DeclaresTypeSignature_named: '%{binding} %{must} declare a type signature %{target}'
|
63
|
+
expectation_DeclaresVariable: '%{binding} %{must} debe declare variables'
|
64
|
+
expectation_DeclaresVariable_except: '%{binding} %{must} declare variables distinct from %{target}'
|
65
|
+
expectation_DeclaresVariable_like: '%{binding} %{must} declare a variable similar to %{target}'
|
66
|
+
expectation_DeclaresVariable_named: '%{binding} %{must} declare a variable %{target}'
|
67
|
+
expectation_DoesNullTest: '%{binding} does null tests'
|
68
|
+
expectation_DoesTypeTest: '%{binding} string type tests'
|
69
|
+
expectation_HasAssignmentReturn: '%{binding} returns the result of an assignment'
|
70
|
+
expectation_HasCodeDuplication: '%{binding} has code duplication'
|
71
|
+
expectation_HasMisspelledBindings: '%{binding} is misspelled'
|
72
|
+
expectation_HasRedundantBooleanComparison: '%{binding} makes unnecesary boolean comparisons'
|
73
|
+
expectation_HasRedundantGuards: '%{binding} has unnecessary guards'
|
74
|
+
expectation_HasRedundantIf: '%{binding} has unnecessary ifs'
|
75
|
+
expectation_HasRedundantLambda: '%{binding} has unnecessary lambdas'
|
76
|
+
expectation_HasRedundantLocalVariableReturn: '%{binding} has unnecesary local variables; please try returning the expression directly'
|
77
|
+
expectation_HasRedundantParameter: '%{binding} has unnecessary parameters, that can be removed using point-free'
|
78
|
+
expectation_HasRedundantReduction: '%{binding} uses <i>is</i>, but it does not artihmetic.'
|
79
|
+
expectation_HasTooShortBindings: '%{binding} is a too short identifier'
|
80
|
+
expectation_HasWrongCaseBindings: '%{binding} does not honor case conventions'
|
81
|
+
expectation_IsLongCode: '%{binding} is too long'
|
26
82
|
expectation_must: must
|
27
83
|
expectation_must_not: must not
|
84
|
+
expectation_ReturnsNull: '%{binding} retuns null, which is a bad practice'
|
85
|
+
expectation_solution: solution
|
86
|
+
expectation_Uses: '%{binding} %{must} delegate'
|
87
|
+
expectation_Uses_except: '%{binding} %{must} delegate to something distinct from %{target}'
|
88
|
+
expectation_Uses_like: '%{binding} %{must} delegate to something similar to %{target}'
|
89
|
+
expectation_Uses_named: '%{binding} %{must} use %{target}'
|
90
|
+
expectation_UsesAnonymousVariable: '%{binding} %{must} use an annonymous variable'
|
91
|
+
expectation_UsesComposition: '%{binding} %{must} use composition'
|
92
|
+
expectation_UsesComprehension: '%{binding} %{must} use comprehensions'
|
93
|
+
expectation_UsesConditional: '%{binding} %{must} use conditionals'
|
94
|
+
expectation_UsesCut: '%{binding} uses <i>!</li> operator, which is a bad practice'
|
95
|
+
expectation_UsesFail: '%{binding} uses <i>fail</li>, which is a bad practice'
|
96
|
+
expectation_UsesFindall: '%{binding} %{must} use findall'
|
97
|
+
expectation_UsesForall: '%{binding} %{must} use forall'
|
98
|
+
expectation_UsesForeach: '%{binding} %{must} use foreach'
|
99
|
+
expectation_UsesGuards: '%{binding} %{must} use guards'
|
100
|
+
expectation_UsesIf: '%{binding} %{must} use if'
|
101
|
+
expectation_UsesLambda: '%{binding} %{must} use lambda expressions'
|
102
|
+
expectation_UsesNot: '%{binding} %{must} use not'
|
103
|
+
expectation_UsesPatternMatching: '%{binding} %{must} use pattern matching'
|
104
|
+
expectation_UsesRepeat: '%{binding} %{must} use repeat'
|
105
|
+
expectation_UsesRepeatOf: '%{binding} %{must} use repeat'
|
106
|
+
expectation_UsesSwitch: '%{binding} %{must} use a switch'
|
107
|
+
expectation_UsesUnificationOperator: '%{binding} uses the unification operator (=)'
|
108
|
+
expectation_UsesWhile: '%{binding} %{must} use while'
|
data/lib/locales/es.yml
CHANGED
@@ -1,27 +1,108 @@
|
|
1
1
|
---
|
2
2
|
es:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
3
|
+
expectation_Declares: '%{binding} %{must} contener declaraciones'
|
4
|
+
expectation_Declares_except: '%{binding} %{must} contener declaraciones distintas a %{target}'
|
5
|
+
expectation_Declares_like: '%{binding} %{must} declarar un identificador parecido a %{target}'
|
6
|
+
expectation_Declares_named: '%{binding} %{must} declarar %{target}'
|
7
|
+
expectation_DeclaresAttribute: '%{binding} %{must} declarar atributos'
|
8
|
+
expectation_DeclaresAttribute_except: '%{binding} %{must} declarar atributos diferentes a %{target}'
|
9
|
+
expectation_DeclaresAttribute_like: '%{binding} %{must} declarar un atributo parecido a %{target}'
|
10
|
+
expectation_DeclaresAttribute_named: '%{binding} %{must} declarar un atributo %{target}'
|
11
|
+
expectation_DeclaresClass: '%{binding} %{must} declarar clases'
|
12
|
+
expectation_DeclaresClass_except: '%{binding} %{must} declarar clases diferentes a %{target}'
|
13
|
+
expectation_DeclaresClass_like: '%{binding} %{must} declarar una clase parecida a %{target}'
|
14
|
+
expectation_DeclaresClass_named: '%{binding} %{must} declarar una clase %{target}'
|
15
|
+
expectation_DeclaresComputation: '%{binding} %{must} declarar computaciones'
|
16
|
+
expectation_DeclaresComputation_except: '%{binding} %{must} declarar computaciones diferentes a %{target}'
|
17
|
+
expectation_DeclaresComputation_like: '%{binding} %{must} declarar una computación parecida a %{target}'
|
18
|
+
expectation_DeclaresComputation_named: '%{binding} %{must} declarar una computación %{target}'
|
19
|
+
expectation_DeclaresComputationWithArity0_named: '%{target} %{must} declarar cero parametros'
|
20
|
+
expectation_DeclaresComputationWithArity1_named: '%{target} %{must} tener un parámetro'
|
21
|
+
expectation_DeclaresComputationWithArity2_named: '%{target} %{must} tener dos parámetros'
|
22
|
+
expectation_DeclaresComputationWithArity3_named: '%{target} %{must} tener tres parámetros'
|
23
|
+
expectation_DeclaresComputationWithArity4_named: '%{target} %{must} tener cuatro parámetros'
|
24
|
+
expectation_DeclaresComputationWithArity5_named: '%{target} %{must} tener cinco parámetros'
|
25
|
+
expectation_DeclaresEntryPoint: '%{binding} %{must} declarar un punto de entrada'
|
26
|
+
expectation_DeclaresFact: '%{binding} %{must} declarar hechos'
|
27
|
+
expectation_DeclaresFact_except: '%{binding} %{must} declarar hechos diferentes a %{target}'
|
28
|
+
expectation_DeclaresFact_like: '%{binding} %{must} declarar un hecho parecido a %{target}'
|
29
|
+
expectation_DeclaresFact_named: '%{binding} %{must} declarar un hecho %{target}'
|
30
|
+
expectation_DeclaresFunction: '%{binding} %{must} debe declarar funciones'
|
31
|
+
expectation_DeclaresFunction_except: '%{binding} %{must} declarar funciones diferentes a %{target}'
|
32
|
+
expectation_DeclaresFunction_like: '%{binding} %{must} declarar una función parecida a %{target}'
|
33
|
+
expectation_DeclaresFunction_named: '%{binding} %{must} declarar una función %{target}'
|
34
|
+
expectation_DeclaresMethod: '%{binding} %{must} declarar métodos'
|
35
|
+
expectation_DeclaresMethod_except: '%{binding} %{must} declarar métodos diferentes a %{target}'
|
36
|
+
expectation_DeclaresMethod_like: '%{binding} %{must} declarar un método parecido a %{target}'
|
37
|
+
expectation_DeclaresMethod_named: '%{binding} %{must} declarar un método %{target}'
|
38
|
+
expectation_DeclaresObject: '%{binding} %{must} declarar objetos'
|
39
|
+
expectation_DeclaresObject_except: '%{binding} %{must} declarar objetos diferentes a %{target}'
|
40
|
+
expectation_DeclaresObject_like: '%{binding} %{must} declarar un objeto parecido a%{target}'
|
41
|
+
expectation_DeclaresObject_named: '%{binding} %{must} declarar un objeto %{target}'
|
42
|
+
expectation_DeclaresPredicate: '%{binding} %{must} declarar predicados'
|
43
|
+
expectation_DeclaresPredicate_except: '%{binding} %{must} declarar predicados diferentes a %{target}'
|
44
|
+
expectation_DeclaresPredicate_like: '%{binding} %{must} declarar un predicados parecido a %{target}'
|
45
|
+
expectation_DeclaresPredicate_named: '%{binding} %{must} declarar un predicados %{target}'
|
46
|
+
expectation_DeclaresProcedure: '%{binding} %{must} declarar procedimientos'
|
47
|
+
expectation_DeclaresProcedure_except: '%{binding} %{must} declarar procedimientos diferentes a %{target}'
|
48
|
+
expectation_DeclaresProcedure_like: '%{binding} %{must} declarar un procedimiento parecido a %{target}'
|
49
|
+
expectation_DeclaresProcedure_named: '%{binding} %{must} declarar un procedimiento %{target}'
|
50
|
+
expectation_DeclaresRecursively_named: '%{target} %{must} estar declarado recursivamente'
|
51
|
+
expectation_DeclaresRule: '%{binding} %{must} debe declarar reglas'
|
52
|
+
expectation_DeclaresRule_except: '%{binding} %{must} declarar reglas diferentes a %{target}'
|
53
|
+
expectation_DeclaresRule_like: '%{binding} %{must} declarar una regla parecida a %{target}'
|
54
|
+
expectation_DeclaresRule_named: '%{binding} %{must} declarar una regla %{target}'
|
55
|
+
expectation_DeclaresTypeAlias: '%{binding} %{must} declarar sinónimos de tipo'
|
56
|
+
expectation_DeclaresTypeAlias_except: '%{binding} %{must} declarar sinónimos de tipo diferentes a %{target}'
|
57
|
+
expectation_DeclaresTypeAlias_like: '%{binding} %{must} declarar un sinónimo de tipo parecido a %{target}'
|
58
|
+
expectation_DeclaresTypeAlias_named: '%{binding} %{must} declarar un sinónimo de tipo %{target}'
|
59
|
+
expectation_DeclaresTypeSignature: '%{binding} %{must} decarar firmas de tipos'
|
60
|
+
expectation_DeclaresTypeSignature_except: '%{binding} %{must} declarar firmas de tipos diferentes a %{target}'
|
61
|
+
expectation_DeclaresTypeSignature_like: '%{binding} %{must} declarar una firma para algo parecido %{target}'
|
62
|
+
expectation_DeclaresTypeSignature_named: '%{binding} %{must} declarar una firma %{target}'
|
63
|
+
expectation_DeclaresVariable: '%{binding} %{must} debe declarar variables'
|
64
|
+
expectation_DeclaresVariable_except: '%{binding} %{must} declarar variables diferentes a %{target}'
|
65
|
+
expectation_DeclaresVariable_like: '%{binding} %{must} declarar una variable parecida a %{target}'
|
66
|
+
expectation_DeclaresVariable_named: '%{binding} %{must} declarar una variable %{target}'
|
67
|
+
expectation_DoesNullTest: '%{binding} hace comparaciones contra null'
|
68
|
+
expectation_DoesTypeTest: '%{binding} hace comparaciones contra strings'
|
69
|
+
expectation_HasAssignmentReturn: '%{binding} devuelve el resultado de una asignación'
|
70
|
+
expectation_HasCodeDuplication: '%{binding} tiene código repetido'
|
71
|
+
expectation_HasMisspelledBindings: '%{binding} está mal escrito'
|
14
72
|
expectation_HasRedundantBooleanComparison: '%{binding} hace comparaciones booleanas innecesarias'
|
15
73
|
expectation_HasRedundantGuards: '%{binding} tiene guardas innecesarias'
|
16
74
|
expectation_HasRedundantIf: '%{binding} tiene ifs innecesarios'
|
17
75
|
expectation_HasRedundantLambda: '%{binding} tiene lambdas innecesarias'
|
76
|
+
expectation_HasRedundantLocalVariableReturn: '%{binding} usa variables locales innecesarias; podés retornar directamente la expresión'
|
18
77
|
expectation_HasRedundantParameter: '%{binding} tiene parámetros innecesarios (se pueden eliminar mediante point-free)'
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
expectation_HasUsage: '%{binding} %{must} utilizar %{target}'
|
24
|
-
expectation_HasVariable: '%{binding} %{must} utilizar variables'
|
25
|
-
expectation_HasWhile: '%{binding} %{must} utilizar repetición condicional (sentencia <i>while</i>)'
|
78
|
+
expectation_HasRedundantReduction: '%{binding} usa <i>is</i>, pero no realiza cálculos.'
|
79
|
+
expectation_HasTooShortBindings: '%{binding} es un identificador muy corto'
|
80
|
+
expectation_HasWrongCaseBindings: '%{binding} no respeta la convención de nombres'
|
81
|
+
expectation_IsLongCode: '%{binding} es muy largo. Tratá de delegar más'
|
26
82
|
expectation_must: debe
|
27
83
|
expectation_must_not: no debe
|
84
|
+
expectation_ReturnsNull: '%{binding} retorna null, lo cual es una mala práctica'
|
85
|
+
expectation_solution: la solución
|
86
|
+
expectation_Uses: '%{binding} %{must} delegar'
|
87
|
+
expectation_Uses_except: '%{binding} %{must} delegar en algo diferente a %{target}'
|
88
|
+
expectation_Uses_like: '%{binding} %{must} delegar en algo parecido a %{target}'
|
89
|
+
expectation_Uses_named: '%{binding} %{must} utilizar %{target}'
|
90
|
+
expectation_UsesAnonymousVariable: '%{binding} %{must} utilizar una variable anónima'
|
91
|
+
expectation_UsesComposition: '%{binding} %{must} usar composición'
|
92
|
+
expectation_UsesComprehension: '%{binding} %{must} emplear listas por comprensión'
|
93
|
+
expectation_UsesConditional: '%{binding} %{must} utilizar condicionales'
|
94
|
+
expectation_UsesCut: '%{binding} usa el operador !, lo cual es una mala práctica'
|
95
|
+
expectation_UsesFail: '%{binding} usa <i>fail</li>, lo cual es una mala práctica'
|
96
|
+
expectation_UsesFindall: '%{binding} %{must} utilizar findall'
|
97
|
+
expectation_UsesForall: '%{binding} %{must} utilizar forall'
|
98
|
+
expectation_UsesForeach: '%{binding} %{must} usar una repetición indexada (sentencia <i>foreach</i>)'
|
99
|
+
expectation_UsesGuards: '%{binding} %{must} usar guardas'
|
100
|
+
expectation_UsesIf: '%{binding} %{must} usar if'
|
101
|
+
expectation_UsesLambda: '%{binding} %{must} emplear expresiones lambda'
|
102
|
+
expectation_UsesNot: '%{binding} %{must} utilizar not'
|
103
|
+
expectation_UsesPatternMatching: '%{binding} %{must} utilizar pattern matching'
|
104
|
+
expectation_UsesRepeat: '%{binding} %{must} usar una repetición simple (sentencia <i>repeat</i>)'
|
105
|
+
expectation_UsesRepeatOf: '%{binding} %{must} usar una repetición simple (sentencia <i>repeat</i>) de %{target}'
|
106
|
+
expectation_UsesSwitch: '%{binding} %{must} utilizar un switch'
|
107
|
+
expectation_UsesUnificationOperator: '%{binding} usa el operador de unificación (=)'
|
108
|
+
expectation_UsesWhile: '%{binding} %{must} utilizar repetición condicional (sentencia <i>while</i>)'
|
data/lib/mumukit/inspection.rb
CHANGED
@@ -5,78 +5,43 @@ I18n.load_translations_path File.join(__dir__, '..', 'locales', '*.yml')
|
|
5
5
|
require_relative '../mumukit/inspection/version'
|
6
6
|
|
7
7
|
module Mumukit
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
class Inspection
|
9
|
+
attr_accessor :type, :target, :negated
|
10
|
+
alias negated? negated
|
11
|
+
|
12
|
+
def initialize(type, target, negated=false)
|
13
|
+
@type = type
|
14
|
+
@target = target
|
15
|
+
@negated = negated
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
def self.parse_base_inspection(s)
|
21
|
-
target_match = s.match /^(.*):(.*)$/
|
22
|
-
if target_match
|
23
|
-
TargetedInspection.new(target_match[1], target_match[2])
|
24
|
-
else
|
25
|
-
PlainInspection.new(s)
|
26
|
-
end
|
18
|
+
def to_s
|
19
|
+
"#{negated_to_s}#{type}#{target_to_s}"
|
27
20
|
end
|
28
21
|
|
29
|
-
|
30
|
-
|
31
|
-
{negated: negated?, type: type, target: target}
|
32
|
-
end
|
22
|
+
def negated_to_s
|
23
|
+
negated ? 'Not:' : nil
|
33
24
|
end
|
34
25
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
def negated?
|
39
|
-
false
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class PlainInspection < PositiveInspection
|
44
|
-
def initialize(type)
|
45
|
-
@type = type
|
46
|
-
end
|
47
|
-
|
48
|
-
def target
|
49
|
-
nil
|
50
|
-
end
|
26
|
+
def target_to_s
|
27
|
+
target ? ":#{target.to_s}" : nil
|
51
28
|
end
|
52
29
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
@target = target
|
30
|
+
def self.parse_binding_name(binding_s)
|
31
|
+
if binding_s.start_with? 'Intransitive:'
|
32
|
+
binding_s[13..-1]
|
33
|
+
else
|
34
|
+
binding_s
|
59
35
|
end
|
60
36
|
end
|
61
37
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
def negated?
|
68
|
-
true
|
69
|
-
end
|
70
|
-
|
71
|
-
def target
|
72
|
-
@inspection.target
|
73
|
-
end
|
74
|
-
|
75
|
-
def type
|
76
|
-
@inspection.type
|
77
|
-
end
|
38
|
+
def self.parse(insepection_s)
|
39
|
+
raise "Invalid inspection #{insepection_s}" unless insepection_s =~ /^(Not\:)?([^\:]+)\:?(.+)?$/
|
40
|
+
Inspection.new($2, Mumukit::Inspection::Target.parse($3), $1.present?)
|
78
41
|
end
|
79
42
|
end
|
80
43
|
end
|
81
44
|
|
45
|
+
require_relative '../mumukit/inspection/target'
|
46
|
+
require_relative '../mumukit/inspection/expectation'
|
82
47
|
require_relative '../mumukit/inspection/i18n'
|
@@ -0,0 +1,93 @@
|
|
1
|
+
class Mumukit::Inspection::Expectation
|
2
|
+
attr_accessor :binding, :inspection
|
3
|
+
|
4
|
+
def initialize(binding, inspection)
|
5
|
+
@binding = binding
|
6
|
+
@inspection = inspection
|
7
|
+
end
|
8
|
+
|
9
|
+
def check!
|
10
|
+
raise "Wrong binding #{binding}" unless binding?
|
11
|
+
raise "Wrong inspection #{inspection}" unless inspection?
|
12
|
+
end
|
13
|
+
|
14
|
+
def translate
|
15
|
+
Mumukit::Inspection::I18n.translate self
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_h
|
19
|
+
{binding: binding, inspection: inspection.to_s}
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.guess_type(expectation)
|
23
|
+
if expectation[:inspection] =~ /(Not\:)?Has.*/
|
24
|
+
V0
|
25
|
+
else
|
26
|
+
V2
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.parse(expectation)
|
31
|
+
guess_type(expectation).new(
|
32
|
+
expectation[:binding],
|
33
|
+
Mumukit::Inspection.parse(expectation[:inspection])).tap &:check!
|
34
|
+
end
|
35
|
+
|
36
|
+
class V0 < Mumukit::Inspection::Expectation
|
37
|
+
INSPECTIONS = %w(HasBinding HasTypeDeclaration HasTypeSignature HasVariable HasArity HasDirectRecursion
|
38
|
+
HasComposition HasComprehension HasForeach HasIf HasGuards HasConditional HasLambda HasRepeat HasWhile
|
39
|
+
HasUsage)
|
40
|
+
|
41
|
+
|
42
|
+
def binding?
|
43
|
+
binding.present?
|
44
|
+
end
|
45
|
+
|
46
|
+
def inspection?
|
47
|
+
inspection.present? && INSPECTIONS.include?(inspection.type)
|
48
|
+
end
|
49
|
+
|
50
|
+
def as_v2
|
51
|
+
if has? 'Binding' then as_v2_declare ''
|
52
|
+
elsif has? 'TypeDeclaration' then as_v2_declare 'TypeAlias'
|
53
|
+
elsif has? 'TypeSignature' then as_v2_declare 'TypeSignature'
|
54
|
+
elsif has? 'Variable' then as_v2_declare 'Variable'
|
55
|
+
elsif has? 'Arity' then as_v2_declare "ComputationWithArity#{inspection.target.value}"
|
56
|
+
elsif has? 'DirectRecursion' then as_v2_declare "Recursively"
|
57
|
+
elsif has? 'Usage'
|
58
|
+
V2.new binding, new_inspection('Uses', Mumukit::Inspection::Target.named(inspection.target.value))
|
59
|
+
else as_v2_use
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def has?(simple_type)
|
64
|
+
inspection.type == "Has#{simple_type}"
|
65
|
+
end
|
66
|
+
|
67
|
+
def as_v2_use
|
68
|
+
V2.new binding, new_inspection(inspection.type.gsub('Has', 'Uses'), Mumukit::Inspection::Target.anyone)
|
69
|
+
end
|
70
|
+
|
71
|
+
def as_v2_declare(simple_type)
|
72
|
+
V2.new '', new_inspection("Declares#{simple_type}", Mumukit::Inspection::Target.named(binding))
|
73
|
+
end
|
74
|
+
|
75
|
+
def new_inspection(type, target)
|
76
|
+
Mumukit::Inspection.new(type, target, inspection.negated?)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class V2 < Mumukit::Inspection::Expectation
|
81
|
+
def binding?
|
82
|
+
true
|
83
|
+
end
|
84
|
+
|
85
|
+
def inspection?
|
86
|
+
true
|
87
|
+
end
|
88
|
+
|
89
|
+
def as_v2
|
90
|
+
self
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -1,38 +1,34 @@
|
|
1
|
-
module Mumukit::Inspection
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Mumukit::Inspection::I18n
|
2
|
+
class << self
|
3
|
+
def translate(e)
|
4
|
+
e = e.as_v2
|
5
|
+
key = key_for e.binding, e.inspection
|
6
|
+
::I18n.t key,
|
7
|
+
binding: t_binding(e.binding),
|
8
|
+
target: t_target(e.inspection),
|
9
|
+
must: t_must(e.inspection)
|
10
|
+
rescue
|
11
|
+
'<unknown expectation>'
|
6
12
|
end
|
7
|
-
end
|
8
13
|
|
9
|
-
|
10
|
-
def must
|
11
|
-
'must'
|
12
|
-
end
|
13
|
-
end
|
14
|
+
alias t translate
|
14
15
|
|
15
|
-
|
16
|
-
class << self
|
17
|
-
def translate(expectation)
|
18
|
-
binding = expectation[:binding]
|
19
|
-
inspection = Mumukit::Inspection.parse expectation[:inspection]
|
16
|
+
private
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
must: t_must(inspection)
|
25
|
-
rescue
|
26
|
-
'<unknown expectation>'
|
27
|
-
end
|
18
|
+
def key_for(binding, inspection)
|
19
|
+
"expectation_#{inspection.type}#{inspection.target ? inspection.target.i18n_suffix : nil }"
|
20
|
+
end
|
28
21
|
|
29
|
-
|
22
|
+
def t_binding(binding)
|
23
|
+
binding.present? ? "<strong>#{Mumukit::Inspection.parse_binding_name binding}</strong>" : ::I18n.t("expectation_solution")
|
24
|
+
end
|
30
25
|
|
31
|
-
|
26
|
+
def t_must(parsed)
|
27
|
+
::I18n.t("expectation_#{parsed.negated? ? 'must_not' : 'must' }")
|
28
|
+
end
|
32
29
|
|
33
|
-
|
34
|
-
|
35
|
-
end
|
30
|
+
def t_target(parsed)
|
31
|
+
"<strong>#{parsed.target.value}</strong>" if parsed.target
|
36
32
|
end
|
37
33
|
end
|
38
|
-
end
|
34
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
class Mumukit::Inspection::Target
|
2
|
+
attr_accessor :type, :value
|
3
|
+
|
4
|
+
def initialize(type, value=nil)
|
5
|
+
@type = type
|
6
|
+
@value = value
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.parse(target_s)
|
10
|
+
if target_s.blank?
|
11
|
+
nil
|
12
|
+
elsif target_s == '*'
|
13
|
+
anyone
|
14
|
+
elsif target_s.start_with? '^'
|
15
|
+
new :except, target_tail(target_s)
|
16
|
+
elsif target_s.start_with? '~'
|
17
|
+
new :like, target_tail(target_s)
|
18
|
+
elsif target_s.start_with? '='
|
19
|
+
named target_tail(target_s)
|
20
|
+
else
|
21
|
+
unknown target_s
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_s
|
26
|
+
case type
|
27
|
+
when :anyone
|
28
|
+
'*'
|
29
|
+
when :except
|
30
|
+
"^#{value}"
|
31
|
+
when :like
|
32
|
+
"~#{value}"
|
33
|
+
when :named
|
34
|
+
"=#{value}"
|
35
|
+
else
|
36
|
+
value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def i18n_suffix
|
41
|
+
case type
|
42
|
+
when :anyone
|
43
|
+
nil
|
44
|
+
when :except
|
45
|
+
"_except"
|
46
|
+
when :like
|
47
|
+
"_like"
|
48
|
+
else
|
49
|
+
"_named"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.target_tail(target_s)
|
54
|
+
target_s[1..-1]
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.unknown(value)
|
58
|
+
new(:unknown, value)
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.named(value)
|
62
|
+
new(:named, value)
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.anyone
|
66
|
+
new(:anyone)
|
67
|
+
end
|
68
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mumukit-inspection
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Franco Leonardo Bulgarelli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mumukit-core
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
22
|
+
version: '2'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.1'
|
30
|
+
- - "<"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
32
|
+
version: '2'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: bundler
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,7 +96,9 @@ files:
|
|
90
96
|
- lib/locales/en.yml
|
91
97
|
- lib/locales/es.yml
|
92
98
|
- lib/mumukit/inspection.rb
|
99
|
+
- lib/mumukit/inspection/expectation.rb
|
93
100
|
- lib/mumukit/inspection/i18n.rb
|
101
|
+
- lib/mumukit/inspection/target.rb
|
94
102
|
- lib/mumukit/inspection/version.rb
|
95
103
|
homepage: ''
|
96
104
|
licenses:
|