kuniri 0.0.1 → 0.2
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/.gitignore +1 -0
- data/.travis.yml +9 -7
- data/COPYING +160 -656
- data/Gemfile +4 -3
- data/README.md +57 -27
- data/Rakefile +3 -1
- data/bin/kuniri +50 -26
- data/data/aggregation_lang.rb +33 -0
- data/data/attribute_lang.rb +14 -87
- data/data/class_lang.rb +19 -41
- data/data/comment_lang.rb +52 -0
- data/data/conditional_lang.rb +14 -41
- data/data/constructor_lang.rb +4 -12
- data/data/end_block_lang.rb +7 -6
- data/data/extern_requirement_lang.rb +10 -17
- data/data/function_behavior_lang.rb +17 -66
- data/data/global_function_lang.rb +26 -0
- data/data/lang_syntax.rb +82 -49
- data/data/method_lang.rb +26 -0
- data/data/module_namespace_lang.rb +8 -13
- data/data/repetition_lang.rb +19 -32
- data/data/token_lang.rb +2 -44
- data/data/variable_behaviour_lang.rb +43 -0
- data/data/variable_global_lang.rb +13 -72
- data/kuniri.gemspec +4 -4
- data/lib/kuniri/core/configuration/language_available.rb +2 -2
- data/lib/kuniri/core/kuniri.rb +32 -24
- data/lib/kuniri/core/setting.rb +51 -85
- data/lib/kuniri/error/parser_error.rb +9 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/aggregation.rb +29 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/attribute.rb +0 -40
- data/lib/kuniri/language/abstract_container/structured_and_oo/global_tokens.rb +20 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/repetition.rb +9 -1
- data/lib/kuniri/language/abstract_container/structured_and_oo/variable_global.rb +0 -35
- data/lib/kuniri/language/container_data/structured_and_oo/aggregation_data.rb +23 -0
- data/lib/kuniri/language/container_data/structured_and_oo/attribute_data.rb +4 -2
- data/lib/kuniri/language/container_data/structured_and_oo/basic_structure.rb +24 -0
- data/lib/kuniri/language/container_data/structured_and_oo/class_data.rb +13 -19
- data/lib/kuniri/language/container_data/structured_and_oo/conditional_data.rb +2 -13
- data/lib/kuniri/language/container_data/structured_and_oo/constructor_data.rb +2 -0
- data/lib/kuniri/language/container_data/structured_and_oo/extern_requirement_data.rb +11 -6
- data/lib/kuniri/language/container_data/structured_and_oo/{file_element.rb → file_element_data.rb} +11 -9
- data/lib/kuniri/language/container_data/structured_and_oo/function_abstract.rb +58 -11
- data/lib/kuniri/language/container_data/structured_and_oo/function_data.rb +3 -3
- data/lib/kuniri/language/container_data/structured_and_oo/manager_basic_structure_data.rb +55 -0
- data/lib/kuniri/language/container_data/structured_and_oo/method_data.rb +5 -4
- data/lib/kuniri/language/container_data/structured_and_oo/module_namespace_data.rb +3 -1
- data/lib/kuniri/language/container_data/structured_and_oo/repetition_data.rb +2 -13
- data/lib/kuniri/language/container_data/structured_and_oo/variable_global_data.rb +2 -0
- data/lib/kuniri/language/language.rb +37 -11
- data/lib/kuniri/language/metadata.rb +29 -0
- data/lib/kuniri/language/ruby/aggregation_ruby.rb +37 -0
- data/lib/kuniri/language/ruby/attribute_ruby.rb +23 -38
- data/lib/kuniri/language/ruby/class_ruby.rb +2 -10
- data/lib/kuniri/language/ruby/conditional_ruby.rb +20 -6
- data/lib/kuniri/language/ruby/constructor_ruby.rb +5 -7
- data/lib/kuniri/language/ruby/end_block_ruby.rb +1 -1
- data/lib/kuniri/language/ruby/function_behavior_ruby.rb +1 -9
- data/lib/kuniri/language/ruby/global_function_ruby.rb +32 -0
- data/lib/kuniri/language/ruby/method_ruby.rb +33 -0
- data/lib/kuniri/language/ruby/repetition_ruby.rb +60 -14
- data/lib/kuniri/language/ruby/ruby_syntax.rb +76 -49
- data/lib/kuniri/parser/output_factory.rb +29 -0
- data/lib/kuniri/parser/output_format.rb +134 -0
- data/lib/kuniri/parser/parser.rb +3 -7
- data/lib/kuniri/parser/xml_builder_engine.rb +94 -0
- data/lib/kuniri/parser/xml_output_format.rb +143 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/aggregation_state.rb +45 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/attribute_state.rb +0 -1
- data/lib/kuniri/state_machine/OO_structured_fsm/basic_structure_state.rb +182 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/class_state.rb +12 -3
- data/lib/kuniri/state_machine/OO_structured_fsm/conditional_state.rb +11 -68
- data/lib/kuniri/state_machine/OO_structured_fsm/constructor_state.rb +7 -52
- data/lib/kuniri/state_machine/OO_structured_fsm/function_behaviour_state.rb +86 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/include_state.rb +2 -3
- data/lib/kuniri/state_machine/OO_structured_fsm/method_state.rb +8 -50
- data/lib/kuniri/state_machine/OO_structured_fsm/oo_structured_state.rb +6 -1
- data/lib/kuniri/state_machine/OO_structured_fsm/repetition_state.rb +10 -59
- data/lib/kuniri/state_machine/OO_structured_fsm/token_state_machine.rb +4 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/variable_state.rb +0 -1
- data/lib/kuniri/version.rb +1 -1
- data/other/analyseFile.asta +0 -0
- data/spec/core/kuniri_spec.rb +2 -1
- data/spec/core/setting_spec.rb +35 -61
- data/spec/language/abstract_container/aggregation_spec.rb +13 -0
- data/spec/language/abstract_container/extern_requirement_spec.rb +13 -0
- data/spec/language/container_data/structured_and_oo/aggregation_data_spec.rb +29 -0
- data/spec/language/container_data/structured_and_oo/attribute_data_spec.rb +9 -2
- data/spec/language/container_data/structured_and_oo/class_data_spec.rb +1 -46
- data/spec/language/container_data/structured_and_oo/constructor_data_spec.rb +32 -2
- data/spec/language/container_data/structured_and_oo/extern_requirement_data_spec.rb +31 -7
- data/spec/language/container_data/structured_and_oo/{file_element_spec.rb → file_element_data_spec.rb} +21 -5
- data/spec/language/container_data/structured_and_oo/function_abstract_spec.rb +213 -0
- data/spec/language/container_data/structured_and_oo/function_data_spec.rb +31 -2
- data/spec/language/container_data/structured_and_oo/manager_basic_structure_data_spec.rb +150 -0
- data/spec/language/container_data/structured_and_oo/method_data_spec.rb +80 -0
- data/spec/language/container_data/structured_and_oo/module_namespace_spec.rb +7 -1
- data/spec/language/container_data/structured_and_oo/variable_global_data_spec.rb +9 -0
- data/spec/language/language_factory_spec.rb +1 -1
- data/spec/language/language_spec.rb +46 -9
- data/spec/language/ruby/aggregation_ruby_spec.rb +80 -0
- data/spec/language/ruby/class_ruby_spec.rb +66 -6
- data/spec/language/ruby/constructor_ruby_spec.rb +1 -1
- data/spec/language/ruby/end_block_ruby_spec.rb +11 -0
- data/spec/language/ruby/extern_requirement_ruby_spec.rb +59 -0
- data/spec/language/ruby/function_behavior_ruby_spec.rb +54 -2
- data/spec/language/ruby/global_test/.kuniri.yml +4 -0
- data/spec/language/ruby/global_test/complete_class_ruby_spec.rb +161 -0
- data/spec/language/ruby/global_test/conditional/.kuniri.yml +4 -0
- data/spec/language/ruby/global_test/conditional/.kuniri1.yml +4 -0
- data/spec/language/ruby/global_test/conditional/.kuniri2.yml +4 -0
- data/spec/language/ruby/global_test/conditional/.kuniri3.yml +4 -0
- data/spec/language/ruby/global_test/conditional/.kuniri4.yml +4 -0
- data/spec/language/ruby/global_test/conditional/.kuniri5.yml +4 -0
- data/spec/language/ruby/global_test/conditional/.kuniri6.yml +4 -0
- data/spec/language/ruby/global_test/conditional/a_lot_of_conditionals_spec.rb +92 -0
- data/spec/language/ruby/global_test/conditional/constructor_very_mix_conditional_spec.rb +105 -0
- data/spec/language/ruby/global_test/conditional/function_with_conditional_spec.rb +94 -0
- data/spec/language/ruby/global_test/conditional/function_with_nested_conditional_spec.rb +56 -0
- data/spec/language/ruby/global_test/conditional/method_very_mix_conditional_spec.rb +109 -0
- data/spec/language/ruby/global_test/conditional/very_deep_conditional_structure_spec.rb +61 -0
- data/spec/language/ruby/global_test/conditional/very_mix_conditional_spec.rb +105 -0
- data/spec/language/ruby/global_test/conditionalAndRepetition/.kuniri.yml +4 -0
- data/spec/language/ruby/global_test/conditionalAndRepetition/mix_conditional_repetition_spec.rb +57 -0
- data/spec/language/ruby/global_test/repetition/.kuniri.yml +4 -0
- data/spec/language/ruby/global_test/repetition/.kuniri2.yml +4 -0
- data/spec/language/ruby/global_test/repetition/.kuniri3.yml +4 -0
- data/spec/language/ruby/global_test/repetition/.kuniri4.yml +4 -0
- data/spec/language/ruby/global_test/repetition/.kuniri5.yml +4 -0
- data/spec/language/ruby/global_test/repetition/.kuniri6.yml +4 -0
- data/spec/language/ruby/global_test/repetition/.kuniri7.yml +4 -0
- data/spec/language/ruby/global_test/repetition/.kuniri8.yml +4 -0
- data/spec/language/ruby/global_test/repetition/complete_class_integrity.rb +41 -0
- data/spec/language/ruby/global_test/repetition/complete_class_until_loop_spec.rb +42 -0
- data/spec/language/ruby/global_test/repetition/complete_class_while_loop_spec.rb +41 -0
- data/spec/language/ruby/global_test/repetition/complete_class_with_repetition_spec.rb +42 -0
- data/spec/language/ruby/global_test/repetition/constructor_with_mix_repetition_spec.rb +57 -0
- data/spec/language/ruby/global_test/repetition/method_with_mix_repetition_spec.rb +59 -0
- data/spec/language/ruby/global_test/repetition/very_mix_repetition_spec.rb +61 -0
- data/spec/language/ruby/global_test/repetition/very_nested_repetition_spec.rb +65 -0
- data/spec/language/ruby/method_ruby_spec.rb +52 -0
- data/spec/language/ruby/repetition_ruby_spec.rb +175 -8
- data/spec/language/ruby/ruby_syntax_spec.rb +213 -84
- data/spec/parser/output_factory_spec.rb +32 -0
- data/spec/parser/output_format_spec.rb +83 -0
- data/spec/parser/parser_spec.rb +7 -0
- data/spec/parser/xmlSchemaValidate/.kuniri1.yml +3 -0
- data/spec/parser/xmlSchemaValidate/.kuniri2.yml +3 -0
- data/spec/parser/xmlSchemaValidate/.kuniri3.yml +3 -0
- data/spec/parser/xmlSchemaValidate/class_data.xsd +99 -0
- data/spec/parser/xmlSchemaValidate/fullCodeTwo.xsd +119 -0
- data/spec/parser/xmlSchemaValidate/fullCodeWithComments.xsd +146 -0
- data/spec/parser/xmlSchemaValidate/simpleFunction.xsd +25 -0
- data/spec/parser/xmlSchemaValidate/validate_xml_spec.rb +52 -0
- data/spec/parser/xml_builder_engine_spec.rb +258 -0
- data/spec/parser/xml_output_format_spec.rb +274 -0
- data/spec/samples/rubySyntaxParts/aggregation/classAggregation.rb +37 -0
- data/spec/samples/rubySyntaxParts/aggregation/constructorAggregation.rb +36 -0
- data/spec/samples/rubySyntaxParts/aggregation/methodAggregation.rb +36 -0
- data/spec/samples/rubySyntaxParts/aggregation/multipleAggregation.rb +59 -0
- data/spec/samples/rubySyntaxParts/comment/simple_multiple_line_comment_class.rb +7 -0
- data/spec/samples/rubySyntaxParts/comment/simple_single_line_comment_class.rb +2 -1
- data/spec/samples/rubySyntaxParts/conditionalStatment/aLotOfConditionals.rb +42 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/commonCasesOfConditionals.rb +47 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/constructorConditional.rb +1 -1
- data/spec/samples/rubySyntaxParts/conditionalStatment/constructorMixConditional.rb +41 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/methodMixConditional.rb +41 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/mixConditionalWithRepetition.rb +20 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/nestedConditional.rb +61 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/veryDeepConditionalStructure.rb +48 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/veryMixConditional.rb +37 -0
- data/spec/samples/rubySyntaxParts/fullCode/fullCodeTwo.rb +56 -0
- data/spec/samples/rubySyntaxParts/fullCode/fullCodeWithComments.rb +64 -0
- data/spec/samples/rubySyntaxParts/fullCode/simpleFullCode.rb +9 -1
- data/spec/samples/rubySyntaxParts/method/simpleMethod.rb +2 -0
- data/spec/samples/rubySyntaxParts/repetition/beginWithWhileLoopInClass.rb +10 -0
- data/spec/samples/rubySyntaxParts/repetition/constructorWithMixRepetition.rb +22 -0
- data/spec/samples/rubySyntaxParts/repetition/forLoopInClass.rb +7 -0
- data/spec/samples/rubySyntaxParts/repetition/methodWithMixRepetition.rb +19 -0
- data/spec/samples/rubySyntaxParts/repetition/mixConditionalRepetition.rb +17 -0
- data/spec/samples/rubySyntaxParts/repetition/untilLoopInClass.rb +16 -0
- data/spec/samples/rubySyntaxParts/repetition/veryMixRepetition.rb +28 -0
- data/spec/samples/rubySyntaxParts/repetition/veryNestedRepetition.rb +17 -0
- data/spec/samples/rubySyntaxParts/repetition/whileLoopInClass.rb +12 -0
- data/spec/state_machine/OO_structured_fsm/aggregation_state_spec.rb +67 -0
- data/spec/state_machine/OO_structured_fsm/class_state_spec.rb +15 -0
- data/spec/state_machine/OO_structured_fsm/conditional_state_spec.rb +64 -0
- data/spec/state_machine/OO_structured_fsm/include_state_spec.rb +3 -3
- data/spec/state_machine/OO_structured_fsm/method_state_spec.rb +18 -0
- data/spec/state_machine/OO_structured_fsm/repetition_state_spec.rb +27 -0
- metadata +195 -28
- data/lib/kuniri/core/configuration/monitor_available.rb +0 -13
- data/lib/kuniri/language/abstract_container/structured_and_oo/constructor.rb +0 -52
- data/lib/kuniri/parser/parser_xml.rb +0 -128
- data/spec/language/abstract_container/constructor_spec.rb +0 -13
- data/spec/util/html_logger_spec.rb +0 -31
- data/spec/util/logger_spec.rb +0 -20
- data/spec/util/txt_logger_spec.rb +0 -31
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require_relative '../abstract_container/structured_and_oo/conditional'
|
|
2
|
+
require_relative '../abstract_container/structured_and_oo/global_tokens'
|
|
2
3
|
require_relative '../container_data/structured_and_oo/conditional_data'
|
|
3
4
|
|
|
4
5
|
module Languages
|
|
@@ -18,8 +19,9 @@ module Languages
|
|
|
18
19
|
|
|
19
20
|
conditionalCaptured = Languages::ConditionalData.new
|
|
20
21
|
conditionalCaptured.type = conditional_type(pLine)
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
unless conditionalCaptured.type == Languages::ELSE_LABEL
|
|
23
|
+
conditionalCaptured.expression = get_expression(result)
|
|
24
|
+
end
|
|
23
25
|
|
|
24
26
|
return conditionalCaptured
|
|
25
27
|
end
|
|
@@ -34,28 +36,40 @@ module Languages
|
|
|
34
36
|
regexExp = /^\s*case\s+(.*)/
|
|
35
37
|
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
|
36
38
|
|
|
39
|
+
regexExp = /^\s*when\s+(.*)/
|
|
40
|
+
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
|
41
|
+
|
|
37
42
|
regexExp = /^\s*unless\s+(.*)/
|
|
38
43
|
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
|
39
44
|
|
|
40
45
|
regexExp = /^\s*elsif\s+(.*)/
|
|
41
46
|
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
|
42
47
|
|
|
48
|
+
regexExp = /^\s*else\s*/
|
|
49
|
+
return pLine.scan(regexExp)[0].gsub(" ", "") if regexExp =~ pLine
|
|
50
|
+
|
|
43
51
|
return nil
|
|
44
52
|
end
|
|
45
53
|
|
|
46
54
|
# Override
|
|
47
55
|
def conditional_type(pString)
|
|
48
56
|
regexExp = /^\s+if|^if/
|
|
49
|
-
return
|
|
57
|
+
return Languages::IF_LABEL if regexExp =~ pString
|
|
50
58
|
|
|
51
59
|
regexExp = /^\s+case|^case/
|
|
52
|
-
return
|
|
60
|
+
return Languages::CASE_LABEL if regexExp =~ pString
|
|
61
|
+
|
|
62
|
+
regexExp = /^\s+when|^when/
|
|
63
|
+
return Languages::WHEN_LABEL if regexExp =~ pString
|
|
53
64
|
|
|
54
65
|
regexExp = /^\s+unless|^unless/
|
|
55
|
-
return
|
|
66
|
+
return Languages::UNLESS_LABEL if regexExp =~ pString
|
|
56
67
|
|
|
57
68
|
regexExp = /^\s+elsif|^elsif/
|
|
58
|
-
return
|
|
69
|
+
return Languages::ELSIF_LABEL if regexExp =~ pString
|
|
70
|
+
|
|
71
|
+
regexExp = /^\s+else|^else/
|
|
72
|
+
return Languages::ELSE_LABEL if regexExp =~ pString
|
|
59
73
|
|
|
60
74
|
return nil
|
|
61
75
|
end
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require_relative '../abstract_container/structured_and_oo/constructor'
|
|
2
1
|
require_relative '../container_data/structured_and_oo/constructor_data'
|
|
3
2
|
require_relative 'function_behavior_ruby'
|
|
4
3
|
|
|
@@ -16,14 +15,13 @@ module Languages
|
|
|
16
15
|
def get_constructor(pLine, type = 'public')
|
|
17
16
|
result = get_function(pLine)
|
|
18
17
|
return nil unless result
|
|
18
|
+
return nil unless result.name =~ /initialize/
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
end
|
|
20
|
+
constructorData = ConstructorData.new(result.name)
|
|
21
|
+
constructorData << result
|
|
22
|
+
|
|
23
|
+
return constructorData
|
|
25
24
|
|
|
26
|
-
return result
|
|
27
25
|
end
|
|
28
26
|
|
|
29
27
|
# Class
|
|
@@ -12,7 +12,6 @@ module Languages
|
|
|
12
12
|
public
|
|
13
13
|
|
|
14
14
|
def initialize
|
|
15
|
-
@log = @settings = Kuniri::Setting.create.log
|
|
16
15
|
end
|
|
17
16
|
|
|
18
17
|
# Get Ruby function.
|
|
@@ -20,8 +19,6 @@ module Languages
|
|
|
20
19
|
result = detect_function(pLine)
|
|
21
20
|
return nil unless result
|
|
22
21
|
|
|
23
|
-
@log.write_log("Info: get method")
|
|
24
|
-
|
|
25
22
|
functionRuby = Languages::FunctionData.new(result)
|
|
26
23
|
|
|
27
24
|
parameters = handling_parameter(pLine)
|
|
@@ -30,9 +27,6 @@ module Languages
|
|
|
30
27
|
functionRuby.add_parameters(parameter)
|
|
31
28
|
end
|
|
32
29
|
end
|
|
33
|
-
|
|
34
|
-
@log.write_log("Debug: Method: #{functionRuby.name}, Parameter:
|
|
35
|
-
#{functionRuby.parameters}")
|
|
36
30
|
|
|
37
31
|
return functionRuby
|
|
38
32
|
end
|
|
@@ -61,7 +55,7 @@ module Languages
|
|
|
61
55
|
if element =~ /=/
|
|
62
56
|
parameter = element.scan(/(\w*)=/).join("")
|
|
63
57
|
value = element.scan(/=(\w*)/).join("")
|
|
64
|
-
defaultParameter =
|
|
58
|
+
defaultParameter = {parameter => value}
|
|
65
59
|
newList.push(defaultParameter)
|
|
66
60
|
next
|
|
67
61
|
end
|
|
@@ -95,8 +89,6 @@ module Languages
|
|
|
95
89
|
|
|
96
90
|
private
|
|
97
91
|
|
|
98
|
-
@log
|
|
99
|
-
|
|
100
92
|
# Override
|
|
101
93
|
def get_parameters(pLine, pRegex)
|
|
102
94
|
partialParameters = pLine.scan(pRegex).join("")
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require_relative '../container_data/structured_and_oo/function_data'
|
|
2
|
+
require_relative 'function_behavior_ruby'
|
|
3
|
+
|
|
4
|
+
module Languages
|
|
5
|
+
|
|
6
|
+
module Ruby
|
|
7
|
+
|
|
8
|
+
# Handling ruby global function
|
|
9
|
+
class GlobalFunctionRuby < Languages::Ruby::FunctionBehaviorRuby
|
|
10
|
+
|
|
11
|
+
public
|
|
12
|
+
|
|
13
|
+
# Get Ruby global function.
|
|
14
|
+
# @see FunctionBehaviorRuby
|
|
15
|
+
def get_method(pLine, type = 'public')
|
|
16
|
+
result = get_function(pLine)
|
|
17
|
+
return nil unless result
|
|
18
|
+
|
|
19
|
+
functionData = FunctionData.new(result.name)
|
|
20
|
+
functionData << result
|
|
21
|
+
|
|
22
|
+
return functionData
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Class
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Ruby
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Language
|
|
32
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require_relative '../container_data/structured_and_oo/method_data'
|
|
2
|
+
require_relative 'function_behavior_ruby'
|
|
3
|
+
|
|
4
|
+
module Languages
|
|
5
|
+
|
|
6
|
+
module Ruby
|
|
7
|
+
|
|
8
|
+
# Handling ruby method
|
|
9
|
+
class MethodRuby < Languages::Ruby::FunctionBehaviorRuby
|
|
10
|
+
|
|
11
|
+
public
|
|
12
|
+
|
|
13
|
+
# Get Ruby method.
|
|
14
|
+
# @see FunctionBehaviorRuby
|
|
15
|
+
def get_method(pLine, type = 'public')
|
|
16
|
+
result = get_function(pLine)
|
|
17
|
+
return nil unless result
|
|
18
|
+
return nil if result.name =~ /initialize/
|
|
19
|
+
|
|
20
|
+
methodData = MethodData.new(result.name)
|
|
21
|
+
methodData << result
|
|
22
|
+
|
|
23
|
+
return methodData
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Class
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Ruby
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Language
|
|
33
|
+
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/global_tokens'
|
|
1
2
|
require_relative '../abstract_container/structured_and_oo/repetition'
|
|
2
3
|
require_relative '../container_data/structured_and_oo/repetition_data'
|
|
3
4
|
|
|
@@ -15,12 +16,12 @@ module Languages
|
|
|
15
16
|
def get_repetition(pLine)
|
|
16
17
|
result = detect_repetition(pLine)
|
|
17
18
|
return nil unless result
|
|
18
|
-
|
|
19
|
+
#result = remove_unnecessary_information(result)
|
|
19
20
|
repetitionCaptured = Languages::RepetitionData.new
|
|
20
|
-
repetitionCaptured.type = repetition_type(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
repetitionCaptured.type = repetition_type(result)
|
|
22
|
+
repetitionCaptured.expression = get_expression(
|
|
23
|
+
repetitionCaptured.type,
|
|
24
|
+
result)
|
|
24
25
|
return repetitionCaptured
|
|
25
26
|
end
|
|
26
27
|
|
|
@@ -28,14 +29,24 @@ module Languages
|
|
|
28
29
|
|
|
29
30
|
# Override
|
|
30
31
|
def detect_repetition(pLine)
|
|
31
|
-
regexExp = /^\s*while\s+(.*)
|
|
32
|
-
return pLine
|
|
32
|
+
regexExp = /^\s*while\s+(.*)/
|
|
33
|
+
return pLine[regexExp, 0] if regexExp =~ pLine
|
|
34
|
+
|
|
35
|
+
regexExp = /^\s*for\s+(\w+)\s+in\s+(.+)(\bdo\b)?/
|
|
36
|
+
return pLine[regexExp, 0] if regexExp =~ pLine
|
|
33
37
|
|
|
34
|
-
regexExp = /^\s*
|
|
35
|
-
return pLine
|
|
38
|
+
regexExp = /^\s*until\s+(.*)(\bdo\b)?/
|
|
39
|
+
return pLine[regexExp, 0] if regexExp =~ pLine
|
|
36
40
|
|
|
37
|
-
regexExp = /^\s*
|
|
38
|
-
return pLine
|
|
41
|
+
regexExp = /^\s*end\s+while\s+(.+)/
|
|
42
|
+
return pLine[regexExp, 0] if regexExp =~ pLine
|
|
43
|
+
|
|
44
|
+
regexExp = /(lambda)\s+do(.*)\s*/
|
|
45
|
+
return pLine[regexExp, 0] if regexExp =~ pLine
|
|
46
|
+
|
|
47
|
+
# TODO: BUG in this case -> puts "test.each do |x|"
|
|
48
|
+
regexExp = /\.(\s*\w+)\s+do(.*)\s*/
|
|
49
|
+
return pLine[regexExp, 0] if regexExp =~ pLine
|
|
39
50
|
|
|
40
51
|
return nil
|
|
41
52
|
end
|
|
@@ -43,21 +54,56 @@ module Languages
|
|
|
43
54
|
# Override
|
|
44
55
|
def repetition_type(pString)
|
|
45
56
|
regexExp = /^\s+while|^while/
|
|
46
|
-
return
|
|
57
|
+
return Languages::WHILE_LABEL if regexExp =~ pString
|
|
47
58
|
|
|
48
59
|
regexExp = /^\s+for|^for/
|
|
49
|
-
return
|
|
60
|
+
return Languages::FOR_LABEL if regexExp =~ pString
|
|
61
|
+
|
|
62
|
+
regexExp = /^\s+until|^until/
|
|
63
|
+
return Languages::UNTIL_LABEL if regexExp =~ pString
|
|
64
|
+
|
|
65
|
+
regexExp = /^\s*end\s+while\s+/
|
|
66
|
+
return Languages::DO_WHILE_LABEL if regexExp =~ pString
|
|
67
|
+
|
|
68
|
+
regexExp = /^lambda\s+/
|
|
69
|
+
return Languages::LAMBDA_LABEL if regexExp =~ pString
|
|
70
|
+
|
|
71
|
+
regexExp = /\.\w+/
|
|
72
|
+
return pString[/\w+/, 0].upcase if regexExp =~ pString
|
|
50
73
|
|
|
51
74
|
return nil
|
|
52
75
|
end
|
|
53
76
|
|
|
54
77
|
# Override
|
|
55
|
-
def get_expression(pString)
|
|
78
|
+
def get_expression(pType, pString)
|
|
79
|
+
case pType
|
|
80
|
+
when Languages::FOR_LABEL
|
|
81
|
+
pString.slice!("for")
|
|
82
|
+
pString.slice!("do")
|
|
83
|
+
when Languages::WHILE_LABEL
|
|
84
|
+
pString.slice!("while")
|
|
85
|
+
pString.slice!("do")
|
|
86
|
+
when Languages::UNTIL_LABEL
|
|
87
|
+
pString.slice!("until")
|
|
88
|
+
pString.slice!("do")
|
|
89
|
+
when Languages::DO_WHILE_LABEL
|
|
90
|
+
pString.slice!("end")
|
|
91
|
+
pString.slice!("while")
|
|
92
|
+
else
|
|
93
|
+
pString.slice!(".")
|
|
94
|
+
end
|
|
56
95
|
leftStrip = pString.lstrip
|
|
57
96
|
rightStrip = leftStrip.rstrip
|
|
97
|
+
|
|
58
98
|
return rightStrip
|
|
59
99
|
end
|
|
60
100
|
|
|
101
|
+
# Override
|
|
102
|
+
def remove_unnecessary_information(pString)
|
|
103
|
+
return pString.gsub(/\./,"") if pString =~ /\./
|
|
104
|
+
return pString
|
|
105
|
+
end
|
|
106
|
+
|
|
61
107
|
# class
|
|
62
108
|
end
|
|
63
109
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require_relative '../language'
|
|
2
2
|
require_relative '../container_data/structured_and_oo/class_data'
|
|
3
|
-
require_relative '../container_data/structured_and_oo/
|
|
3
|
+
require_relative '../container_data/structured_and_oo/file_element_data'
|
|
4
4
|
require_relative 'token_ruby'
|
|
5
5
|
require_relative 'extern_requirement_ruby'
|
|
6
6
|
require_relative 'variable_global_ruby'
|
|
@@ -13,6 +13,9 @@ require_relative 'repetition_ruby'
|
|
|
13
13
|
require_relative 'function_behavior_ruby'
|
|
14
14
|
require_relative 'attribute_ruby'
|
|
15
15
|
require_relative 'comment_ruby'
|
|
16
|
+
require_relative 'method_ruby'
|
|
17
|
+
require_relative 'aggregation_ruby'
|
|
18
|
+
require_relative '../metadata'
|
|
16
19
|
|
|
17
20
|
module Languages
|
|
18
21
|
|
|
@@ -30,11 +33,13 @@ module Languages
|
|
|
30
33
|
@classHandler = Languages::Ruby::ClassRuby.new
|
|
31
34
|
@attributeHandler = Languages::Ruby::AttributeRuby.new
|
|
32
35
|
@endBlockHandler = Languages::Ruby::EndBlockRuby.new
|
|
33
|
-
@methodHandler = Languages::Ruby::
|
|
36
|
+
@methodHandler = Languages::Ruby::MethodRuby.new
|
|
34
37
|
@constructorHandler = Languages::Ruby::ConstructorRuby.new
|
|
35
38
|
@conditionalHandler = Languages::Ruby::ConditionalRuby.new
|
|
36
39
|
@repetitionHandler = Languages::Ruby::RepetitionRuby.new
|
|
37
40
|
@commentHandler = Languages::Ruby::CommentRuby.new
|
|
41
|
+
@aggregationHandler = Languages::Ruby::AggregationRuby.new
|
|
42
|
+
@metadata = Languages::Metadata.create
|
|
38
43
|
@visibility = "public"
|
|
39
44
|
end
|
|
40
45
|
|
|
@@ -44,70 +49,92 @@ module Languages
|
|
|
44
49
|
@name = File.basename(pPath, ".*")
|
|
45
50
|
@path = File.dirname(pPath)
|
|
46
51
|
analyse_first_step(pPath)
|
|
47
|
-
|
|
52
|
+
analyse_second_step
|
|
48
53
|
end
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
def comment_extract
|
|
52
|
-
all_comments = Array.new
|
|
53
|
-
#Find a simple Ruby comment with '#'
|
|
54
|
-
@source.scan(/#(.*)/).each do |comments|
|
|
55
|
-
all_comments.push(comments[0])
|
|
56
|
-
end
|
|
57
|
-
#Find multiple line comment.
|
|
58
|
-
@source.scan(/^=begin(.*?)^=end/m).each do |comment|
|
|
59
|
-
all_comments.push(comment[0].lstrip)
|
|
60
|
-
end
|
|
61
|
-
return all_comments
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# TODO: remove it.
|
|
65
|
-
def method_extract
|
|
66
|
-
return @currentClass.get_methods
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
# TODO: remove it.
|
|
70
|
-
def class_extract
|
|
71
|
-
return @currentClass
|
|
72
|
-
end
|
|
55
|
+
private
|
|
73
56
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
end
|
|
57
|
+
attr_accessor :visibility
|
|
58
|
+
@source
|
|
59
|
+
@flagMultipleLineComment = false
|
|
78
60
|
|
|
79
|
-
#
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
61
|
+
# Puts every statement in a single line
|
|
62
|
+
# @param pLine Line of the file to be analysed.
|
|
63
|
+
def handle_semicolon(pLine)
|
|
64
|
+
commentLine = []
|
|
83
65
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
66
|
+
if pLine =~ /^=begin(.*?)/
|
|
67
|
+
@flagMultipleLineComment = true
|
|
68
|
+
elsif pLine =~ /^=end/
|
|
69
|
+
@flagMultipleLineComment = false
|
|
70
|
+
end
|
|
88
71
|
|
|
89
|
-
|
|
90
|
-
|
|
72
|
+
unless @flagMultipleLineComment == true || pLine =~ /#(.*)/
|
|
73
|
+
return pLine.split(/;/)
|
|
74
|
+
end
|
|
75
|
+
commentLine << pLine
|
|
91
76
|
end
|
|
92
77
|
|
|
93
|
-
private
|
|
94
|
-
|
|
95
|
-
attr_accessor :visibility
|
|
96
|
-
@source
|
|
97
|
-
|
|
98
78
|
# First step for analyse code, it is responsible for get only basic
|
|
99
79
|
# informations.
|
|
100
80
|
# @param pPath Path of file to be analysed.
|
|
101
81
|
def analyse_first_step(pPath)
|
|
102
|
-
fileElement = Languages::
|
|
82
|
+
fileElement = Languages::FileElementData.new(pPath)
|
|
103
83
|
@source = File.open(pPath, "rb")
|
|
104
84
|
@source.each do |line|
|
|
105
85
|
next if line.gsub(/\s+/,"").size == 0
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
86
|
+
processedLines = handle_semicolon(line)
|
|
87
|
+
if !processedLines.nil?
|
|
88
|
+
processedLines.each do |line|
|
|
89
|
+
@state.handle_line(line)
|
|
90
|
+
fileElement = @state.execute(fileElement, line)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
109
93
|
end
|
|
94
|
+
|
|
95
|
+
@source.close()
|
|
110
96
|
@fileElements.push(fileElement)
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def analyse_second_step
|
|
101
|
+
sort_all_classes
|
|
102
|
+
sort_all_aggregations
|
|
103
|
+
|
|
104
|
+
allActualAggregations = []
|
|
105
|
+
|
|
106
|
+
@metadata.allAggregations.each do |element|
|
|
107
|
+
if binary_search(@metadata.allClasses, element)
|
|
108
|
+
allActualAggregations << element
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# TODO: Think how to improve.
|
|
113
|
+
@fileElements.each do |fileElement|
|
|
114
|
+
fileElement.classes.each do |classes|
|
|
115
|
+
classes.aggregations.delete_if do |aggregation|
|
|
116
|
+
unless allActualAggregations.include? aggregation
|
|
117
|
+
true
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# TODO: Move it to utils
|
|
125
|
+
def binary_search(pVector, pElement)
|
|
126
|
+
pVector.bsearch {|obj| pElement.name <=> obj.name}
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# TODO: Move it to utils
|
|
130
|
+
def sort_all_classes
|
|
131
|
+
@metadata.allClasses.sort! {|c1, c2| c1.name <=> c2.name}
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# TODO: Move it to utils
|
|
135
|
+
def sort_all_aggregations
|
|
136
|
+
@metadata.allAggregations.sort! {|a1, a2| a1.name <=> a2.name}
|
|
137
|
+
@metadata.allAggregations.uniq! {|a| a.name}
|
|
111
138
|
end
|
|
112
139
|
|
|
113
140
|
# Class
|