Module: Kanayago
- Defined in:
- lib/kanayago.rb,
lib/kanayago/cli.rb,
lib/kanayago/lsp.rb,
lib/kanayago/version.rb,
lib/kanayago/base_node.rb,
lib/kanayago/call_node.rb,
lib/kanayago/lsp/server.rb,
lib/kanayago/scope_node.rb,
lib/kanayago/string_node.rb,
lib/kanayago/literal_node.rb,
lib/kanayago/pattern_node.rb,
lib/kanayago/constant_node.rb,
lib/kanayago/variable_node.rb,
lib/kanayago/statement_node.rb,
lib/kanayago/lsp/diagnostics.rb,
ext/kanayago/kanayago.c
Overview
Parse Ruby code with Ruby’s Parser(Universal Parser)
Defined Under Namespace
Modules: LSP Classes: AliasNode, AndNode, ArgsAuxNode, ArgsCatNode, ArgsPushNode, ArgumentsNode, ArrayPatternNode, AttributeAssignmentNode, BackRefNode, BaseNode, BeginNode, BlockNode, BlockPassNode, BreakNode, CLI, CallNode, Case2Node, Case3Node, CaseNode, ClassNode, ClassVariableAssignmentNode, ClassVariableNode, Colon2Node, Colon3Node, ConstantDeclarationNode, ConstantNode, DasgnNode, DefinedNode, DefinitionNode, DynamicExecuteStringNode, DynamicRegexpNode, DynamicStringNode, DynamicSymbolNode, DynamicVariableNode, EmbeddedExpressionStringNode, EncodingNode, EnsureNode, ErrinfoNode, ErrorNode, ExclusiveFlipFlopNode, ExclusiveRangeNode, ExecuteStringNode, FalseNode, FileNode, FindPatternNode, FlipFlopNode, FloatNode, ForMasgnNode, ForNode, FunctionCallNode, GlobalAssignmentNode, GlobalVariableNode, HashNode, HashPatternNode, IfStatementNode, ImaginaryNode, InNode, InstanceAssignmentNode, InstanceVariableNode, IntegerNode, IterNode, KwArgNode, LambdaNode, LineNode, ListNode, LocalAssignmentNode, LocalVariableNode, MasgnNode, Match2Node, Match3Node, MatchNode, ModuleNode, NextNode, NilNode, NthRefNode, OnceNode, OperatorAssignment1Node, OperatorAssignment2Node, OperatorAssignmentAndNode, OperatorAssignmentOrNode, OperatorCallNode, OperatorConstantDeclarationNode, OptArgNode, OrNode, ParseResult, PostArgNode, PostexeNode, RangeNode, RationalNode, RedoNode, RegexpNode, RescueBodyNode, RescueNode, RetryNode, ReturnNode, SafeCallNode, ScopeNode, SelfNode, SingletonClassNode, SingletonDefinitionNode, SplatNode, StringNode, SuperNode, SymbolNode, TrueNode, UndefNode, UnlessStatementNode, UntilNode, ValiasNode, VariableCallNode, WhenNode, WhileNode, YieldNode, ZeroListNode, ZeroSuperNode
Constant Summary collapse
- VERSION =
'0.9.0'
Class Method Summary collapse
Class Method Details
.kanayago_parse(source) ⇒ Object
1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 |
# File 'ext/kanayago/kanayago.c', line 1138
static VALUE
kanayago_parse(VALUE self, VALUE source)
{
struct ruby_parser *parser;
rb_parser_t *parser_params;
/* Use Kanayago's own parser config */
parser_params = rb_ruby_parser_new(&kanayago_parser_config);
VALUE vparser = TypedData_Make_Struct(0, struct ruby_parser,
&ruby_parser_data_type, parser);
parser->parser_params = parser_params;
// Enable error tolerant parser
rb_ruby_parser_error_tolerant(parser_params);
// Enable script_lines to get source lines from AST
rb_ruby_parser_set_script_lines(parser_params);
VALUE vast = rb_parser_compile_string(vparser, "main", source, 0);
rb_ast_t *ast = rb_ruby_ast_data_get(vast);
VALUE ast_node = ast_to_node_instance(ast->body.root);
/* Ensure vast and vparser are not garbage collected during AST processing.
* The AST data (ast->body.root) is owned by vast, so we need to
* keep vast alive until we're done traversing the AST. */
RB_GC_GUARD(vast);
RB_GC_GUARD(vparser);
// Get error_buffer from parser_params using accessor function
VALUE error_buffer = rb_ruby_parser_error_buffer_get(parser_params);
// Get script_lines from AST and convert to Ruby array
VALUE script_lines = rb_parser_build_script_lines_from(ast->body.script_lines);
VALUE result = rb_hash_new();
rb_hash_aset(result, ID2SYM(rb_intern("ast")), ast_node);
rb_hash_aset(result, ID2SYM(rb_intern("error")), error_buffer);
rb_hash_aset(result, ID2SYM(rb_intern("script_lines")), script_lines);
return result;
}
|
.parse(source) ⇒ Object
36 37 38 39 40 |
# File 'lib/kanayago.rb', line 36 def self.parse(source) kanayago_parse(source) in { ast:, error:, script_lines: } ParseResult.new(ast, error, script_lines) end |