kuniri 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +43 -0
- data/.rspec +2 -0
- data/.travis.yml +18 -0
- data/.yardopts +1 -0
- data/COPYING +661 -0
- data/Gemfile +14 -0
- data/Guardfile +8 -0
- data/README.md +102 -0
- data/Rakefile +114 -0
- data/bin/kuniri +53 -0
- data/data/attribute_lang.rb +131 -0
- data/data/class_lang.rb +77 -0
- data/data/conditional_lang.rb +71 -0
- data/data/constructor_lang.rb +34 -0
- data/data/end_block_lang.rb +30 -0
- data/data/extern_requirement_lang.rb +45 -0
- data/data/function_behavior_lang.rb +113 -0
- data/data/lang_syntax.rb +111 -0
- data/data/module_namespace_lang.rb +43 -0
- data/data/repetition_lang.rb +62 -0
- data/data/token_lang.rb +55 -0
- data/data/variable_global_lang.rb +118 -0
- data/kuniri.gemspec +24 -0
- data/lib/kuniri/core/configuration/language_available.rb +7 -0
- data/lib/kuniri/core/configuration/log_available.rb +7 -0
- data/lib/kuniri/core/configuration/monitor_available.rb +13 -0
- data/lib/kuniri/core/kuniri.rb +78 -0
- data/lib/kuniri/core/setting.rb +143 -0
- data/lib/kuniri/error/configuration_file_error.rb +12 -0
- data/lib/kuniri/error/language_error.rb +12 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/attribute.rb +73 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/class.rb +51 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/comment.rb +57 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/conditional.rb +42 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/constructor.rb +52 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/end_block.rb +27 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/extern_requirement.rb +36 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/function_behavior.rb +55 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/module_namespace.rb +36 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/repetition.rb +42 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/variable_behaviour.rb +53 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/variable_global.rb +67 -0
- data/lib/kuniri/language/container_data/structured_and_oo/attribute_data.rb +26 -0
- data/lib/kuniri/language/container_data/structured_and_oo/basic_data.rb +18 -0
- data/lib/kuniri/language/container_data/structured_and_oo/class_data.rb +77 -0
- data/lib/kuniri/language/container_data/structured_and_oo/conditional_data.rb +23 -0
- data/lib/kuniri/language/container_data/structured_and_oo/constructor_data.rb +18 -0
- data/lib/kuniri/language/container_data/structured_and_oo/extern_requirement_data.rb +26 -0
- data/lib/kuniri/language/container_data/structured_and_oo/file_element.rb +77 -0
- data/lib/kuniri/language/container_data/structured_and_oo/function_abstract.rb +52 -0
- data/lib/kuniri/language/container_data/structured_and_oo/function_data.rb +21 -0
- data/lib/kuniri/language/container_data/structured_and_oo/method_data.rb +20 -0
- data/lib/kuniri/language/container_data/structured_and_oo/module_namespace_data.rb +18 -0
- data/lib/kuniri/language/container_data/structured_and_oo/repetition_data.rb +23 -0
- data/lib/kuniri/language/container_data/structured_and_oo/variable_global_data.rb +22 -0
- data/lib/kuniri/language/language.rb +222 -0
- data/lib/kuniri/language/language_factory.rb +48 -0
- data/lib/kuniri/language/ruby/attribute_ruby.rb +134 -0
- data/lib/kuniri/language/ruby/class_ruby.rb +83 -0
- data/lib/kuniri/language/ruby/comment_ruby.rb +84 -0
- data/lib/kuniri/language/ruby/conditional_ruby.rb +77 -0
- data/lib/kuniri/language/ruby/constructor_ruby.rb +36 -0
- data/lib/kuniri/language/ruby/end_block_ruby.rb +33 -0
- data/lib/kuniri/language/ruby/extern_requirement_ruby.rb +49 -0
- data/lib/kuniri/language/ruby/function_behavior_ruby.rb +120 -0
- data/lib/kuniri/language/ruby/module_namespace_ruby.rb +47 -0
- data/lib/kuniri/language/ruby/repetition_ruby.rb +68 -0
- data/lib/kuniri/language/ruby/ruby_syntax.rb +117 -0
- data/lib/kuniri/language/ruby/token_ruby.rb +59 -0
- data/lib/kuniri/language/ruby/variable_behaviour_ruby.rb +83 -0
- data/lib/kuniri/language/ruby/variable_global_ruby.rb +123 -0
- data/lib/kuniri/parser/parser.rb +45 -0
- data/lib/kuniri/parser/parser_xml.rb +128 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/attribute_state.rb +51 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/class_state.rb +94 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/comment_state.rb +76 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/conditional_state.rb +92 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/constructor_state.rb +71 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/function_state.rb +82 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/idle_state.rb +80 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/include_state.rb +59 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/method_state.rb +69 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/module_state.rb +79 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/oo_structured_state.rb +92 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/repetition_state.rb +85 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/token_state_machine.rb +8 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/variable_state.rb +49 -0
- data/lib/kuniri/util/html_logger.rb +41 -0
- data/lib/kuniri/util/logger.rb +34 -0
- data/lib/kuniri/util/txt_logger.rb +29 -0
- data/lib/kuniri/version.rb +3 -0
- data/lib/kuniri.rb +5 -0
- data/other/analyseFile.asta +0 -0
- data/spec/core/kuniri_spec.rb +14 -0
- data/spec/core/setting_spec.rb +114 -0
- data/spec/language/abstract_container/attribute_spec.rb +13 -0
- data/spec/language/abstract_container/class_spec.rb +13 -0
- data/spec/language/abstract_container/comment_spec.rb +31 -0
- data/spec/language/abstract_container/conditional_spec.rb +13 -0
- data/spec/language/abstract_container/constructor_spec.rb +13 -0
- data/spec/language/abstract_container/end_block_spec.rb +14 -0
- data/spec/language/abstract_container/module_namespace_spec.rb +13 -0
- data/spec/language/abstract_container/repetition_spec.rb +13 -0
- data/spec/language/container_data/structured_and_oo/attribute_data_spec.rb +32 -0
- data/spec/language/container_data/structured_and_oo/class_data_spec.rb +121 -0
- data/spec/language/container_data/structured_and_oo/conditional_data_spec.rb +34 -0
- data/spec/language/container_data/structured_and_oo/constructor_data_spec.rb +46 -0
- data/spec/language/container_data/structured_and_oo/extern_requirement_data_spec.rb +26 -0
- data/spec/language/container_data/structured_and_oo/file_element_spec.rb +91 -0
- data/spec/language/container_data/structured_and_oo/function_data_spec.rb +22 -0
- data/spec/language/container_data/structured_and_oo/module_namespace_spec.rb +20 -0
- data/spec/language/container_data/structured_and_oo/repetition_data_spec.rb +34 -0
- data/spec/language/container_data/structured_and_oo/variable_global_data_spec.rb +39 -0
- data/spec/language/language_factory_spec.rb +64 -0
- data/spec/language/language_spec.rb +74 -0
- data/spec/language/ruby/attribute_ruby_spec.rb +126 -0
- data/spec/language/ruby/class_ruby_spec.rb +102 -0
- data/spec/language/ruby/comment_ruby_spec.rb +78 -0
- data/spec/language/ruby/conditional_ruby_spec.rb +106 -0
- data/spec/language/ruby/constructor_ruby_spec.rb +57 -0
- data/spec/language/ruby/end_block_ruby_spec.rb +62 -0
- data/spec/language/ruby/function_behavior_ruby_spec.rb +246 -0
- data/spec/language/ruby/module_namespace_ruby_spec.rb +55 -0
- data/spec/language/ruby/repetition_ruby_spec.rb +33 -0
- data/spec/language/ruby/ruby_syntax_spec.rb +482 -0
- data/spec/language/ruby/variable_ruby_spec.rb +134 -0
- data/spec/parser/parser_spec.rb +25 -0
- data/spec/samples/rubySyntaxParts/attribute/simpleAttribute.rb +15 -0
- data/spec/samples/rubySyntaxParts/class/simpleClass.rb +19 -0
- data/spec/samples/rubySyntaxParts/comment/simple_multiple_line_comment_class.rb +33 -0
- data/spec/samples/rubySyntaxParts/comment/simple_multiple_line_comment_global.rb +20 -0
- data/spec/samples/rubySyntaxParts/comment/simple_single_line_comment_class.rb +23 -0
- data/spec/samples/rubySyntaxParts/comment/simple_single_line_comment_global.rb +16 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/constructorConditional.rb +28 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/methodConditional.rb +42 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/nestedConditional.rb +0 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/simpleConditional.rb +43 -0
- data/spec/samples/rubySyntaxParts/constructor/simpleConstructor.rb +27 -0
- data/spec/samples/rubySyntaxParts/extern/multipleLineExternRequirement.rb +0 -0
- data/spec/samples/rubySyntaxParts/extern/requireRelative.rb +6 -0
- data/spec/samples/rubySyntaxParts/extern/simpleExternRequirement.rb +14 -0
- data/spec/samples/rubySyntaxParts/fullCode/simpleCodeWithConditional.rb +18 -0
- data/spec/samples/rubySyntaxParts/fullCode/simpleFullCode.rb +19 -0
- data/spec/samples/rubySyntaxParts/function/simpleFunction.rb +29 -0
- data/spec/samples/rubySyntaxParts/method/simpleMethod.rb +13 -0
- data/spec/samples/rubySyntaxParts/module/simpleModule.rb +12 -0
- data/spec/samples/rubySyntaxParts/repetition/simpleRepetition.rb +28 -0
- data/spec/samples/rubySyntaxParts/variable/simpleVariable.rb +13 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/state_machine/OO_structured_fsm/attribute_state_spec.rb +44 -0
- data/spec/state_machine/OO_structured_fsm/class_state_spec.rb +90 -0
- data/spec/state_machine/OO_structured_fsm/comment_state_spec.rb +30 -0
- data/spec/state_machine/OO_structured_fsm/conditional_state_spec.rb +83 -0
- data/spec/state_machine/OO_structured_fsm/constructor_state_spec.rb +48 -0
- data/spec/state_machine/OO_structured_fsm/function_state_spec.rb +41 -0
- data/spec/state_machine/OO_structured_fsm/idle_state_spec.rb +101 -0
- data/spec/state_machine/OO_structured_fsm/include_state_spec.rb +62 -0
- data/spec/state_machine/OO_structured_fsm/method_state_spec.rb +42 -0
- data/spec/state_machine/OO_structured_fsm/module_state_spec.rb +54 -0
- data/spec/state_machine/OO_structured_fsm/oo_structured_state_spec.rb +0 -0
- data/spec/state_machine/OO_structured_fsm/repetition_state_spec.rb +83 -0
- data/spec/state_machine/OO_structured_fsm/variable_state_spec.rb +40 -0
- data/spec/util/html_logger_spec.rb +31 -0
- data/spec/util/logger_spec.rb +20 -0
- data/spec/util/txt_logger_spec.rb +31 -0
- metadata +326 -0
@@ -0,0 +1,222 @@
|
|
1
|
+
require_relative '../state_machine/OO_structured_fsm/attribute_state'
|
2
|
+
require_relative '../state_machine/OO_structured_fsm/class_state'
|
3
|
+
require_relative '../state_machine/OO_structured_fsm/constructor_state'
|
4
|
+
require_relative '../state_machine/OO_structured_fsm/function_state'
|
5
|
+
require_relative '../state_machine/OO_structured_fsm/idle_state'
|
6
|
+
require_relative '../state_machine/OO_structured_fsm/include_state'
|
7
|
+
require_relative '../state_machine/OO_structured_fsm/method_state'
|
8
|
+
require_relative '../state_machine/OO_structured_fsm/module_state'
|
9
|
+
require_relative '../state_machine/OO_structured_fsm/variable_state'
|
10
|
+
require_relative '../state_machine/OO_structured_fsm/oo_structured_state'
|
11
|
+
require_relative '../state_machine/OO_structured_fsm/conditional_state'
|
12
|
+
require_relative '../state_machine/OO_structured_fsm/repetition_state'
|
13
|
+
require_relative '../state_machine/OO_structured_fsm/comment_state'
|
14
|
+
|
15
|
+
# Module that keeps the language syntax.
|
16
|
+
module Languages
|
17
|
+
|
18
|
+
# @abstract Abstract class for handling different types of language.
|
19
|
+
class Language
|
20
|
+
|
21
|
+
public
|
22
|
+
|
23
|
+
attr_reader :name
|
24
|
+
attr_reader :path
|
25
|
+
|
26
|
+
attr_reader :attributeState
|
27
|
+
attr_reader :state
|
28
|
+
attr_reader :previousState
|
29
|
+
attr_reader :classState
|
30
|
+
attr_reader :constructorState
|
31
|
+
attr_reader :functionState
|
32
|
+
attr_reader :idleState
|
33
|
+
attr_reader :includeState
|
34
|
+
attr_reader :methodState
|
35
|
+
attr_reader :moduleState
|
36
|
+
attr_reader :variableState
|
37
|
+
attr_reader :conditionalState
|
38
|
+
attr_reader :repetitionState
|
39
|
+
attr_reader :commentState
|
40
|
+
|
41
|
+
attr_reader :externRequirementHandler
|
42
|
+
attr_reader :variableHandler
|
43
|
+
attr_reader :functionHandler
|
44
|
+
attr_reader :moduleHandler
|
45
|
+
attr_reader :classHandler
|
46
|
+
attr_reader :endBlockHandler
|
47
|
+
attr_reader :attributeHandler
|
48
|
+
attr_reader :methodHandler
|
49
|
+
attr_reader :constructorHandler
|
50
|
+
attr_reader :conditionalHandler
|
51
|
+
attr_reader :repetitionHandler
|
52
|
+
attr_reader :commentHandler
|
53
|
+
|
54
|
+
attr_accessor :fileElements
|
55
|
+
|
56
|
+
# Those values help state machine to understand which place to add
|
57
|
+
# conditional information and repetition data.
|
58
|
+
attr_accessor :flagFunctionBehaviour
|
59
|
+
|
60
|
+
attr_accessor :string_comment_to_transfer
|
61
|
+
|
62
|
+
# This method initialize all the needed states of state machine.
|
63
|
+
# @note: Never forget to call this method before start parser.
|
64
|
+
def initialize
|
65
|
+
@attributeState =
|
66
|
+
StateMachine::OOStructuredFSM::AttributeState.new(self)
|
67
|
+
@classState = StateMachine::OOStructuredFSM::ClassState.new(self)
|
68
|
+
@constructorState =
|
69
|
+
StateMachine::OOStructuredFSM::ConstructorState.new(self)
|
70
|
+
@functionState = StateMachine::OOStructuredFSM::FunctionState.new(self)
|
71
|
+
@idleState = StateMachine::OOStructuredFSM::IdleState.new(self)
|
72
|
+
@includeState = StateMachine::OOStructuredFSM::IncludeState.new(self)
|
73
|
+
@methodState = StateMachine::OOStructuredFSM::MethodState.new(self)
|
74
|
+
@moduleState = StateMachine::OOStructuredFSM::ModuleState.new(self)
|
75
|
+
@variableState = StateMachine::OOStructuredFSM::VariableState.new(self)
|
76
|
+
@conditionalState =
|
77
|
+
StateMachine::OOStructuredFSM::ConditionalState.new(self)
|
78
|
+
@repetitionState =
|
79
|
+
StateMachine::OOStructuredFSM::RepetitionState.new(self)
|
80
|
+
@commentState = StateMachine::OOStructuredFSM::CommentState.new(self)
|
81
|
+
|
82
|
+
@state = @idleState
|
83
|
+
@previousState = []
|
84
|
+
@previousState.push (@state)
|
85
|
+
|
86
|
+
@fileElements = []
|
87
|
+
@flagFunctionBehaviour = nil
|
88
|
+
|
89
|
+
@string_comment_to_transfer = ""
|
90
|
+
end
|
91
|
+
|
92
|
+
# Set the source code to by analysed.
|
93
|
+
# @param pSource [String] Set the source string.
|
94
|
+
def set_source(pSource)
|
95
|
+
@source = pSource
|
96
|
+
end
|
97
|
+
|
98
|
+
# Based on the source, extract the informations inside of it. For example
|
99
|
+
# in this is step the algorithm try to find classes, and methods. This
|
100
|
+
# method, work like a hook for give more flexibility to implements any
|
101
|
+
# needed steps.
|
102
|
+
def analyse_source
|
103
|
+
raise NotImplementedError
|
104
|
+
end
|
105
|
+
|
106
|
+
# Extract all the comments from the source.
|
107
|
+
def comment_extract
|
108
|
+
raise NotImplementedError
|
109
|
+
end
|
110
|
+
|
111
|
+
# Extract all the method/function from the source.
|
112
|
+
def method_extract
|
113
|
+
raise NotImplementedError
|
114
|
+
end
|
115
|
+
|
116
|
+
# Extract all the class declared in the source.
|
117
|
+
def class_extract
|
118
|
+
raise NotImplementedError
|
119
|
+
end
|
120
|
+
|
121
|
+
# Extract the attribute from source file.
|
122
|
+
def attribute_extract
|
123
|
+
raise NotImplementedError
|
124
|
+
end
|
125
|
+
|
126
|
+
# Extract global variables.
|
127
|
+
def global_variable_extract
|
128
|
+
raise NotImplementedError
|
129
|
+
end
|
130
|
+
|
131
|
+
# Take all the extern requirements
|
132
|
+
def extern_requirement_extract
|
133
|
+
raise NotImplementedError
|
134
|
+
end
|
135
|
+
|
136
|
+
# Rewind state
|
137
|
+
def rewind_state
|
138
|
+
@state = @previousState.pop
|
139
|
+
end
|
140
|
+
|
141
|
+
# TODO: REMOVE IT
|
142
|
+
def get_name
|
143
|
+
return @name
|
144
|
+
end
|
145
|
+
|
146
|
+
# TODO: REMOVE IT
|
147
|
+
def get_path
|
148
|
+
return @path
|
149
|
+
end
|
150
|
+
|
151
|
+
# Handling line
|
152
|
+
def handle_line(pLine)
|
153
|
+
@state.handle_line
|
154
|
+
end
|
155
|
+
|
156
|
+
# Handling class state, i.e, this state is enable when any class is match
|
157
|
+
def class_capture
|
158
|
+
@state.class_capture
|
159
|
+
end
|
160
|
+
|
161
|
+
# Handling method state, this state is enable only after class state.
|
162
|
+
def method_capture
|
163
|
+
@state.method_capture
|
164
|
+
end
|
165
|
+
|
166
|
+
# Handling constructor, only after class state.
|
167
|
+
def constructor_capture
|
168
|
+
@state.constructor_capture
|
169
|
+
end
|
170
|
+
|
171
|
+
# Handling attribute state.
|
172
|
+
def attribute_capture
|
173
|
+
@state.attribute_capture
|
174
|
+
end
|
175
|
+
|
176
|
+
# Handling module, it can be oriented object or structured.
|
177
|
+
def module_capture
|
178
|
+
@state.module_capture
|
179
|
+
end
|
180
|
+
|
181
|
+
# Handling function, it is related with structured state
|
182
|
+
# but not exclusively.
|
183
|
+
def function_capture
|
184
|
+
@state.function_capture
|
185
|
+
end
|
186
|
+
|
187
|
+
# Handling external include
|
188
|
+
def include_capture
|
189
|
+
@state.include_capture
|
190
|
+
end
|
191
|
+
|
192
|
+
# Handling variable
|
193
|
+
def variable_capture
|
194
|
+
@state.variable_capture
|
195
|
+
end
|
196
|
+
|
197
|
+
# Idle state, waiting for action! =D
|
198
|
+
def idle_capture
|
199
|
+
@state.idle_capture
|
200
|
+
end
|
201
|
+
|
202
|
+
# Conditional state.
|
203
|
+
def conditional_capture
|
204
|
+
@state.conditional_capture
|
205
|
+
end
|
206
|
+
|
207
|
+
# keep track of state.
|
208
|
+
def set_state (pState)
|
209
|
+
@previousState.push(@state)
|
210
|
+
@state = pState
|
211
|
+
end
|
212
|
+
|
213
|
+
protected
|
214
|
+
|
215
|
+
@languageType
|
216
|
+
@source
|
217
|
+
|
218
|
+
# End class
|
219
|
+
end
|
220
|
+
|
221
|
+
# End module
|
222
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative 'language'
|
2
|
+
require_relative 'ruby/ruby_syntax'
|
3
|
+
require_relative '../error/language_error'
|
4
|
+
|
5
|
+
module Languages
|
6
|
+
|
7
|
+
# Simple factory to create language objects.
|
8
|
+
class LanguageFactory
|
9
|
+
|
10
|
+
# Handling the class creation.
|
11
|
+
# @param pType [String] Type of object
|
12
|
+
# @return Return an object of language.
|
13
|
+
def get_language(pType)
|
14
|
+
pType.downcase!
|
15
|
+
|
16
|
+
if pType == "ruby"
|
17
|
+
return Languages::RubySyntax.new
|
18
|
+
end
|
19
|
+
if pType == "python"
|
20
|
+
raise Error::LanguageError
|
21
|
+
end
|
22
|
+
if pType == "vhdl"
|
23
|
+
raise Error::LanguageError
|
24
|
+
end
|
25
|
+
if pType == "c"
|
26
|
+
raise Error::LanguageError
|
27
|
+
end
|
28
|
+
if pType == "cplusplus"
|
29
|
+
raise Error::LanguageError
|
30
|
+
end
|
31
|
+
if pType == "java"
|
32
|
+
raise Error::LanguageError
|
33
|
+
end
|
34
|
+
if pType == "assemblyarm"
|
35
|
+
raise Error::LanguageError
|
36
|
+
end
|
37
|
+
if pType == "php"
|
38
|
+
raise Error::LanguageError
|
39
|
+
else
|
40
|
+
raise Error::LanguageError
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Class
|
45
|
+
end
|
46
|
+
|
47
|
+
# Module
|
48
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/attribute'
|
2
|
+
require_relative '../container_data/structured_and_oo/attribute_data'
|
3
|
+
require_relative '../../util/html_logger'
|
4
|
+
require_relative '../../core/setting'
|
5
|
+
|
6
|
+
module Languages
|
7
|
+
|
8
|
+
module Ruby
|
9
|
+
|
10
|
+
# Ruby Handling Ruby attributes
|
11
|
+
class AttributeRuby < Languages::Attribute
|
12
|
+
|
13
|
+
public
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@log = @settings = Kuniri::Setting.create.log
|
17
|
+
@attributeList = []
|
18
|
+
end
|
19
|
+
|
20
|
+
# Get ruby attribute.
|
21
|
+
# @param pLine Verify if line has a ruby attribute.
|
22
|
+
# @return Return AttributeData or nil.
|
23
|
+
def get_attribute(pLine)
|
24
|
+
result = detect_attribute(pLine)
|
25
|
+
return nil unless result
|
26
|
+
|
27
|
+
@log.write_log("Info: Prepare to get attribute.")
|
28
|
+
|
29
|
+
listOfAttributes = []
|
30
|
+
|
31
|
+
# Has comma? Split string by comma
|
32
|
+
result = remove_unnecessary_information(result)
|
33
|
+
|
34
|
+
# Separated by comma, equal or the common case
|
35
|
+
if result.scan(/,/).count >= 1
|
36
|
+
listOfAttributes = handle_multiple_declaration_with_comma(result)
|
37
|
+
@log.write_log("Debug: Declared with comma: #{listOfAttributes}")
|
38
|
+
elsif result.scan(/=/).count > 1
|
39
|
+
listOfAttributes = handle_multiple_declaration_with_equal(result)
|
40
|
+
@log.write_log("Debug: separed by comma: #{listOfAttributes}")
|
41
|
+
else
|
42
|
+
listOfAttributes = handle_line_declaration(result)
|
43
|
+
@log.write_log("Debug: One line declaration #{listOfAttributes}")
|
44
|
+
end
|
45
|
+
|
46
|
+
return listOfAttributes
|
47
|
+
end
|
48
|
+
|
49
|
+
protected
|
50
|
+
|
51
|
+
# Override
|
52
|
+
def detect_attribute(pLine)
|
53
|
+
regexExp = /^\s*(?:@|attr_(?:accessor|read|write))(.*)$/
|
54
|
+
return nil unless pLine =~ regexExp
|
55
|
+
return pLine.scan(regexExp)[0].join("")
|
56
|
+
end
|
57
|
+
|
58
|
+
# Override
|
59
|
+
def remove_unnecessary_information(pString)
|
60
|
+
return pString.gsub!(/\(.*\)/,"") if pString =~ /\(.*\)/
|
61
|
+
return pString
|
62
|
+
end
|
63
|
+
|
64
|
+
# Override
|
65
|
+
def prepare_final_string(pString)
|
66
|
+
if pString =~ /\s+|:|@|=/
|
67
|
+
return pString.gsub!(/\s+|:|@|=/,"")
|
68
|
+
end
|
69
|
+
return pString
|
70
|
+
end
|
71
|
+
|
72
|
+
# Override
|
73
|
+
def handle_multiple_declaration_with_comma(pString)
|
74
|
+
listOfAttributes = []
|
75
|
+
pString = pString.split(",")
|
76
|
+
pString.each do |variable|
|
77
|
+
return nil if variable.scan(/=/).count > 1
|
78
|
+
|
79
|
+
variable = variable.scan(/.*=/).join("") if variable =~ /.*=/
|
80
|
+
|
81
|
+
return nil if variable =~ /\./
|
82
|
+
|
83
|
+
variable = prepare_final_string(variable)
|
84
|
+
attribute = Languages::AttributeData.new(variable)
|
85
|
+
listOfAttributes.push(attribute)
|
86
|
+
end
|
87
|
+
|
88
|
+
return listOfAttributes
|
89
|
+
end
|
90
|
+
|
91
|
+
# Override
|
92
|
+
def handle_multiple_declaration_with_equal(pString)
|
93
|
+
listOfAttributes = []
|
94
|
+
pString = pString.split("=")
|
95
|
+
pString.each do |variable|
|
96
|
+
return nil if variable =~ /\./
|
97
|
+
|
98
|
+
variable = prepare_final_string(variable)
|
99
|
+
attribute = Languages::AttributeData.new(variable)
|
100
|
+
listOfAttributes.push(attribute)
|
101
|
+
end
|
102
|
+
|
103
|
+
return listOfAttributes
|
104
|
+
end
|
105
|
+
|
106
|
+
# Override
|
107
|
+
def handle_line_declaration(pString)
|
108
|
+
listOfAttributes = []
|
109
|
+
if pString =~ /=/
|
110
|
+
pString = pString.scan(/.*=/).join("")
|
111
|
+
return nil if pString =~ /\./
|
112
|
+
end
|
113
|
+
|
114
|
+
return nil if pString =~ /\./
|
115
|
+
|
116
|
+
pString = prepare_final_string(pString)
|
117
|
+
attribute = Languages::AttributeData.new(pString)
|
118
|
+
listOfAttributes.push(attribute)
|
119
|
+
|
120
|
+
return listOfAttributes
|
121
|
+
end
|
122
|
+
|
123
|
+
private
|
124
|
+
|
125
|
+
@log
|
126
|
+
@attributeList
|
127
|
+
|
128
|
+
#Class
|
129
|
+
end
|
130
|
+
|
131
|
+
# Ruby
|
132
|
+
end
|
133
|
+
#Language
|
134
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/class'
|
2
|
+
require_relative '../container_data/structured_and_oo/class_data'
|
3
|
+
require_relative '../../util/html_logger'
|
4
|
+
require_relative '../../core/setting'
|
5
|
+
|
6
|
+
module Languages
|
7
|
+
|
8
|
+
module Ruby
|
9
|
+
|
10
|
+
# Class responsible for handling ruby classes.
|
11
|
+
class ClassRuby < Languages::Class
|
12
|
+
|
13
|
+
public
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@log = @settings = Kuniri::Setting.create.log
|
17
|
+
end
|
18
|
+
|
19
|
+
# Get ruby class.
|
20
|
+
# @see Languages::Class
|
21
|
+
def get_class(pLine)
|
22
|
+
result = detect_class(pLine)
|
23
|
+
return nil unless result
|
24
|
+
|
25
|
+
@log.write_log("Info: Detect class")
|
26
|
+
|
27
|
+
classCaptured = Languages::ClassData.new
|
28
|
+
|
29
|
+
inheritance = get_inheritance(result)
|
30
|
+
classCaptured.inheritances = inheritance if inheritance
|
31
|
+
|
32
|
+
result = prepare_final_string(result)
|
33
|
+
classCaptured.name = result
|
34
|
+
|
35
|
+
@log.write_log("Debug: Class: #{classCaptured.name}")
|
36
|
+
|
37
|
+
return classCaptured
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
# Override
|
43
|
+
def detect_class(pLine)
|
44
|
+
regexExpression = /^\s*class\s+(.*)/
|
45
|
+
return nil unless pLine =~ regexExpression
|
46
|
+
return pLine.scan(regexExpression)[0].join("")
|
47
|
+
end
|
48
|
+
|
49
|
+
# Override
|
50
|
+
def get_inheritance(pString)
|
51
|
+
if pString =~ /</
|
52
|
+
partial = pString.scan(/<(.*)/)
|
53
|
+
return remove_unnecessary_information(partial)
|
54
|
+
end
|
55
|
+
return nil
|
56
|
+
end
|
57
|
+
|
58
|
+
# Override
|
59
|
+
def remove_unnecessary_information(pString)
|
60
|
+
return pString.gsub(/\s|</, "") if pString =~ /\s|</
|
61
|
+
return pString
|
62
|
+
end
|
63
|
+
|
64
|
+
def prepare_final_string(pString)
|
65
|
+
if pString =~ /\s|</
|
66
|
+
partial = pString.gsub(/<.*/,"")
|
67
|
+
return remove_unnecessary_information(partial)
|
68
|
+
end
|
69
|
+
return pString
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
@log
|
75
|
+
|
76
|
+
# class
|
77
|
+
end
|
78
|
+
|
79
|
+
# Ruby
|
80
|
+
end
|
81
|
+
|
82
|
+
# Languages
|
83
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/comment'
|
2
|
+
|
3
|
+
module Languages
|
4
|
+
|
5
|
+
module Ruby
|
6
|
+
|
7
|
+
# CommentRuby is responsible for handling ruby comments.
|
8
|
+
class CommentRuby < Languages::Comment
|
9
|
+
|
10
|
+
public
|
11
|
+
|
12
|
+
@flagMultipleLine
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@flagMultipleLine = false
|
16
|
+
end
|
17
|
+
|
18
|
+
# @see Comment
|
19
|
+
def get_comment(pLine)
|
20
|
+
|
21
|
+
# Single line
|
22
|
+
return pLine.scan(/#(.*)/)[0].join if is_single_line_comment?(pLine)
|
23
|
+
|
24
|
+
# Multiple line
|
25
|
+
multipleLine = handle_multiple_line(pLine)
|
26
|
+
return multipleLine if multipleLine
|
27
|
+
return nil
|
28
|
+
end
|
29
|
+
|
30
|
+
# @see Comment
|
31
|
+
def is_single_line_comment?(pLine)
|
32
|
+
return true if pLine =~ /#(.*)/
|
33
|
+
return false
|
34
|
+
end
|
35
|
+
|
36
|
+
# @see Comment
|
37
|
+
def is_multiple_line_comment?(pLine)
|
38
|
+
return true if (pLine =~ /^=begin(.*?)/ || @flagMultipleLine)
|
39
|
+
return false
|
40
|
+
end
|
41
|
+
|
42
|
+
# @see Comment
|
43
|
+
def is_multiple_line_comment_end?(pLine)
|
44
|
+
return true if pLine =~ /^=end/
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
|
48
|
+
protected
|
49
|
+
|
50
|
+
# @see Comment
|
51
|
+
def prepare_line_comment(pString)
|
52
|
+
return "" if pString =~ /=begin/
|
53
|
+
return pString
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def handle_multiple_line(pLine)
|
59
|
+
if is_multiple_line_comment_end?(pLine)
|
60
|
+
@flagMultipleLine = false
|
61
|
+
return ""
|
62
|
+
end
|
63
|
+
|
64
|
+
if @flagMultipleLine
|
65
|
+
pLine = prepare_line_comment(pLine)
|
66
|
+
return pLine
|
67
|
+
end
|
68
|
+
|
69
|
+
if is_multiple_line_comment?(pLine)
|
70
|
+
@flagMultipleLine = true
|
71
|
+
return ""
|
72
|
+
end
|
73
|
+
|
74
|
+
return nil
|
75
|
+
end
|
76
|
+
|
77
|
+
# class
|
78
|
+
end
|
79
|
+
|
80
|
+
# module
|
81
|
+
end
|
82
|
+
|
83
|
+
# module
|
84
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/conditional'
|
2
|
+
require_relative '../container_data/structured_and_oo/conditional_data'
|
3
|
+
|
4
|
+
module Languages
|
5
|
+
|
6
|
+
module Ruby
|
7
|
+
|
8
|
+
# Class responsible for handling ruby conditional statements.
|
9
|
+
class ConditionalRuby < Languages::Conditional
|
10
|
+
|
11
|
+
public
|
12
|
+
|
13
|
+
# Get ruby conditional.
|
14
|
+
# @see Languages::Conditional
|
15
|
+
def get_conditional(pLine)
|
16
|
+
result = detect_conditional(pLine)
|
17
|
+
return nil unless result
|
18
|
+
|
19
|
+
conditionalCaptured = Languages::ConditionalData.new
|
20
|
+
conditionalCaptured.type = conditional_type(pLine)
|
21
|
+
|
22
|
+
conditionalCaptured.expression = get_expression(result)
|
23
|
+
|
24
|
+
return conditionalCaptured
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
# Override.
|
30
|
+
def detect_conditional(pLine)
|
31
|
+
regexExp = /^\s*if\s+(.*)/
|
32
|
+
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
33
|
+
|
34
|
+
regexExp = /^\s*case\s+(.*)/
|
35
|
+
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
36
|
+
|
37
|
+
regexExp = /^\s*unless\s+(.*)/
|
38
|
+
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
39
|
+
|
40
|
+
regexExp = /^\s*elsif\s+(.*)/
|
41
|
+
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
42
|
+
|
43
|
+
return nil
|
44
|
+
end
|
45
|
+
|
46
|
+
# Override
|
47
|
+
def conditional_type(pString)
|
48
|
+
regexExp = /^\s+if|^if/
|
49
|
+
return "IF" if regexExp =~ pString
|
50
|
+
|
51
|
+
regexExp = /^\s+case|^case/
|
52
|
+
return "CASE" if regexExp =~ pString
|
53
|
+
|
54
|
+
regexExp = /^\s+unless|^unless/
|
55
|
+
return "UNLESS" if regexExp =~ pString
|
56
|
+
|
57
|
+
regexExp = /^\s+elsif|^elsif/
|
58
|
+
return "ELSIF" if regexExp =~ pString
|
59
|
+
|
60
|
+
return nil
|
61
|
+
end
|
62
|
+
|
63
|
+
# Override
|
64
|
+
def get_expression(pString)
|
65
|
+
leftStrip = pString.lstrip
|
66
|
+
rightStrip = leftStrip.rstrip
|
67
|
+
return rightStrip
|
68
|
+
end
|
69
|
+
|
70
|
+
# Class
|
71
|
+
end
|
72
|
+
|
73
|
+
# Module
|
74
|
+
end
|
75
|
+
|
76
|
+
# Module
|
77
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/constructor'
|
2
|
+
require_relative '../container_data/structured_and_oo/constructor_data'
|
3
|
+
require_relative 'function_behavior_ruby'
|
4
|
+
|
5
|
+
module Languages
|
6
|
+
|
7
|
+
module Ruby
|
8
|
+
|
9
|
+
# Handling ruby constructor
|
10
|
+
class ConstructorRuby < Languages::Ruby::FunctionBehaviorRuby
|
11
|
+
|
12
|
+
public
|
13
|
+
|
14
|
+
# Get Ruby constructor.
|
15
|
+
# @see FunctionBehaviorRuby
|
16
|
+
def get_constructor(pLine, type = 'public')
|
17
|
+
result = get_function(pLine)
|
18
|
+
return nil unless result
|
19
|
+
|
20
|
+
if result.name =~ /initialize/
|
21
|
+
result.type = "CONSTRUCTOR"
|
22
|
+
else
|
23
|
+
return nil
|
24
|
+
end
|
25
|
+
|
26
|
+
return result
|
27
|
+
end
|
28
|
+
|
29
|
+
# Class
|
30
|
+
end
|
31
|
+
|
32
|
+
# Ruby
|
33
|
+
end
|
34
|
+
|
35
|
+
# Language
|
36
|
+
end
|