Class: CExtractorFunctions
- Includes:
- CExtractorConstants, CExtractorTypes
- Defined in:
- lib/ceedling/c_extractor/c_extractor_functions.rb
Constant Summary
Constants included from CExtractorConstants
CExtractorConstants::C11_SPECIFIER_KEYWORDS, CExtractorConstants::DECORATOR_KEYWORDS, CExtractorConstants::DEFAULT_CHUNK_SIZE, CExtractorConstants::DEFAULT_MAX_FUNCTION_LENGTH, CExtractorConstants::DEFAULT_MAX_LINE_LENGTH, CExtractorConstants::MODIFIER_KEYWORDS, CExtractorConstants::MSVC_CALLING_CONVENTIONS, CExtractorConstants::PRIVATE_KEYWORDS, CExtractorConstants::TYPE_KEYWORDS, CExtractorConstants::TYPE_QUALIFIER_KEYWORDS
Instance Attribute Summary collapse
-
#max_line_length ⇒ Object
writeonly
Sets the attribute max_line_length.
Instance Method Summary collapse
- #setup ⇒ Object
- #try_extract_function_declaration(scanner) ⇒ Object
-
#try_extract_function_definition(scanner, filepath) ⇒ Object
Try to extract a complete function from the scanner Returns [success, function_data] where: - success: boolean indicating if extraction was successful - function_data: CFunctionDefinition with as much info as available (may be partial on failure).
Instance Attribute Details
#max_line_length=(value) ⇒ Object (writeonly)
Sets the attribute max_line_length
18 19 20 |
# File 'lib/ceedling/c_extractor/c_extractor_functions.rb', line 18 def max_line_length=(value) @max_line_length = value end |
Instance Method Details
#setup ⇒ Object
20 21 22 23 24 25 |
# File 'lib/ceedling/c_extractor/c_extractor_functions.rb', line 20 def setup() # Aliases @code_text = @c_extractor_code_text @max_line_length = DEFAULT_MAX_LINE_LENGTH end |
#try_extract_function_declaration(scanner) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/ceedling/c_extractor/c_extractor_functions.rb', line 27 def try_extract_function_declaration(scanner) # Look for function signature signature = extract_function_signature(scanner, :declaration) return [false, nil] unless signature name = extract_function_name(signature) decorators, signature_stripped = parse_decorators_and_strip(signature, name) return [true, CFunctionDeclaration.new(name: name, signature: signature, decorators: decorators, signature_stripped: signature_stripped)] end |
#try_extract_function_definition(scanner, filepath) ⇒ Object
Try to extract a complete function from the scanner Returns [success, function_data] where:
- success: boolean indicating if extraction was successful
- function_data: CFunctionDefinition with as much info as available (may be partial on failure)
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/ceedling/c_extractor/c_extractor_functions.rb', line 41 def try_extract_function_definition(scanner, filepath) start_pos = scanner.pos # Look for function signature signature = extract_function_signature(scanner, :definition) return [false, CFunctionDefinition.new] unless signature @code_text.skip_deadspace(scanner) unless scanner.peek(1) == '{' return [false, CFunctionDefinition.new( name: extract_function_name(signature), signature: signature, filepath: filepath )] end # Extract function body success, braced_body = @code_text.extract_balanced_braces(scanner) unless success return [false, CFunctionDefinition.new( name: extract_function_name(signature), signature: signature, source_filepath: filepath, code_block: scanner.string[start_pos...scanner.pos] )] end # Extract full function definition code_block = scanner.string[start_pos...scanner.pos] # Fill out function data class name = extract_function_name(signature) decorators, signature_stripped = parse_decorators_and_strip(signature, name) func = CFunctionDefinition.new( name: name, signature: signature, source_filepath: filepath, body: braced_body, code_block: code_block, line_count: code_block.count("\n") + 1, decorators: decorators, signature_stripped: signature_stripped ) return [true, func] end |