Module: Parser

Defined in:
lib/parser.rb,
lib/parser/base.rb,
lib/parser/meta.rb,
lib/parser/color.rb,
lib/parser/ruby18.rb,
lib/parser/ruby19.rb,
lib/parser/ruby20.rb,
lib/parser/ruby21.rb,
lib/parser/ruby22.rb,
lib/parser/ruby23.rb,
lib/parser/ruby24.rb,
lib/parser/ruby25.rb,
lib/parser/ruby26.rb,
lib/parser/ruby27.rb,
lib/parser/ruby28.rb,
lib/parser/ruby30.rb,
lib/parser/ruby31.rb,
lib/parser/ruby32.rb,
lib/parser/ruby33.rb,
lib/parser/ruby34.rb,
lib/parser/runner.rb,
lib/parser/context.rb,
lib/parser/current.rb,
lib/parser/macruby.rb,
lib/parser/version.rb,
lib/parser/ast/node.rb,
lib/parser/messages.rb,
lib/parser/rewriter.rb,
lib/parser/diagnostic.rb,
lib/parser/rubymotion.rb,
lib/parser/source/map.rb,
lib/parser/deprecation.rb,
lib/parser/source/range.rb,
lib/parser/syntax_error.rb,
lib/parser/ast/processor.rb,
lib/parser/lexer/literal.rb,
lib/parser/source/buffer.rb,
lib/parser/tree_rewriter.rb,
lib/parser/lexer/dedenter.rb,
lib/parser/source/comment.rb,
lib/parser/source/map/for.rb,
lib/parser/source/map/send.rb,
lib/parser/source/rewriter.rb,
lib/parser/variables_stack.rb,
lib/parser/builders/default.rb,
lib/parser/clobbering_error.rb,
lib/parser/source/map/index.rb,
lib/parser/current_arg_stack.rb,
lib/parser/diagnostic/engine.rb,
lib/parser/lexer/explanation.rb,
lib/parser/lexer/stack_state.rb,
lib/parser/runner/ruby_parse.rb,
lib/parser/max_numparam_stack.rb,
lib/parser/source/map/heredoc.rb,
lib/parser/source/map/keyword.rb,
lib/parser/source/map/ternary.rb,
lib/parser/static_environment.rb,
lib/parser/runner/ruby_rewrite.rb,
lib/parser/source/map/constant.rb,
lib/parser/source/map/operator.rb,
lib/parser/source/map/variable.rb,
lib/parser/source/map/condition.rb,
lib/parser/source/tree_rewriter.rb,
lib/parser/source/map/collection.rb,
lib/parser/source/map/definition.rb,
lib/parser/source/map/objc_kwarg.rb,
lib/parser/source/map/rescue_body.rb,
lib/parser/source/rewriter/action.rb,
lib/parser/source/comment/associator.rb,
lib/parser/source/tree_rewriter/action.rb,
lib/parser/source/map/method_definition.rb

Defined Under Namespace

Modules: AST, Builders, Color, Deprecation, Messages, Meta, Source Classes: Base, ClobberingError, Context, CurrentArgStack, Diagnostic, Lexer, LexerStrings, MacRuby, MaxNumparamStack, Rewriter, Ruby18, Ruby19, Ruby20, Ruby21, Ruby22, Ruby23, Ruby24, Ruby25, Ruby26, Ruby27, Ruby28, Ruby30, Ruby31, Ruby32, Ruby33, Ruby34, RubyMotion, Runner, StaticEnvironment, SyntaxError, TreeRewriter, VariablesStack

Constant Summary collapse

VERSION =
'3.3.0.5'
MESSAGES =

Diagnostic messages (errors, warnings and notices) that can be generated.

See Also:

{
  # Lexer errors
  :unicode_point_too_large  => 'invalid Unicode codepoint (too large)',
  :invalid_escape           => 'invalid escape character syntax',
  :incomplete_escape        => 'incomplete character syntax',
  :invalid_hex_escape       => 'invalid hex escape',
  :invalid_unicode_escape   => 'invalid Unicode escape',
  :unterminated_unicode     => 'unterminated Unicode escape',
  :escape_eof               => 'escape sequence meets end of file',
  :string_eof               => 'unterminated string meets end of file',
  :regexp_options           => 'unknown regexp options: %{options}',
  :cvar_name                => "`%{name}' is not allowed as a class variable name",
  :ivar_name                => "`%{name}' is not allowed as an instance variable name",
  :gvar_name                => "`%{name}' is not allowed as a global variable name",
  :trailing_in_number       => "trailing `%{character}' in number",
  :empty_numeric            => 'numeric literal without digits',
  :invalid_octal            => 'invalid octal digit',
  :no_dot_digit_literal     => 'no .<digit> floating literal anymore; put 0 before dot',
  :bare_backslash           => 'bare backslash only allowed before newline',
  :unexpected               => "unexpected `%{character}'",
  :embedded_document        => 'embedded document meets end of file (and they embark on a romantic journey)',
  :heredoc_id_has_newline   => 'here document identifier across newlines, never match',
  :heredoc_id_ends_with_nl  => 'here document identifier ends with a newline',
  :unterminated_heredoc_id  => 'unterminated heredoc id',

  # Lexer warnings
  :invalid_escape_use      => 'invalid character syntax; use ?%{escape}',
  :ambiguous_literal       => 'ambiguous first argument; put parentheses or a space even after the operator',
  :ambiguous_regexp        => "ambiguity between regexp and two divisions: wrap regexp in parentheses or add a space after `/' operator",
  :ambiguous_prefix        => "`%{prefix}' interpreted as argument prefix",
  :triple_dot_at_eol       => '... at EOL, should be parenthesized',

  # Parser errors
  :nth_ref_alias                 => 'cannot define an alias for a back-reference variable',
  :begin_in_method               => 'BEGIN in method',
  :backref_assignment            => 'cannot assign to a back-reference variable',
  :invalid_assignment            => 'cannot assign to a keyword',
  :module_name_const             => 'class or module name must be a constant literal',
  :unexpected_token              => 'unexpected token %{token}',
  :argument_const                => 'formal argument cannot be a constant',
  :argument_ivar                 => 'formal argument cannot be an instance variable',
  :argument_gvar                 => 'formal argument cannot be a global variable',
  :argument_cvar                 => 'formal argument cannot be a class variable',
  :duplicate_argument            => 'duplicate argument name',
  :empty_symbol                  => 'empty symbol literal',
  :odd_hash                      => 'odd number of entries for a hash',
  :singleton_literal             => 'cannot define a singleton method for a literal',
  :dynamic_const                 => 'dynamic constant assignment',
  :const_reassignment            => 'constant re-assignment',
  :module_in_def                 => 'module definition in method body',
  :class_in_def                  => 'class definition in method body',
  :unexpected_percent_str        => '%{type}: unknown type of percent-literal',
  :block_and_blockarg            => 'both block argument and literal block are passed',
  :masgn_as_condition            => 'multiple assignment in conditional context',
  :block_given_to_yield          => 'block given to yield',
  :invalid_regexp                => '%{message}',
  :invalid_return                => 'Invalid return in class/module body',
  :csend_in_lhs_of_masgn         => '&. inside multiple assignment destination',
  :cant_assign_to_numparam       => 'cannot assign to numbered parameter %{name}',
  :reserved_for_numparam         => '%{name} is reserved for numbered parameter',
  :ordinary_param_defined        => 'ordinary parameter is defined',
  :numparam_used_in_outer_scope  => 'numbered parameter is already used in an outer scope',
  :circular_argument_reference   => 'circular argument reference %{var_name}',
  :pm_interp_in_var_name         => 'symbol literal with interpolation is not allowed',
  :lvar_name                     => "`%{name}' is not allowed as a local variable name",
  :undefined_lvar                => "no such local variable: `%{name}'",
  :duplicate_variable_name       => 'duplicate variable name %{name}',
  :duplicate_pattern_key         => 'duplicate hash pattern key %{name}',
  :endless_setter                => 'setter method cannot be defined in an endless method definition',
  :invalid_id_to_get             => 'identifier %{identifier} is not valid to get',
  :forward_arg_after_restarg     => '... after rest argument',
  :no_anonymous_blockarg         => 'no anonymous block parameter',
  :no_anonymous_restarg          => 'no anonymous rest parameter',
  :no_anonymous_kwrestarg        => 'no anonymous keyword rest parameter',
  :ambiguous_anonymous_restarg   => 'anonymous rest parameter is also used within block',
  :ambiguous_anonymous_kwrestarg => 'anonymous keyword rest parameter is also used within block',
  :ambiguous_anonymous_blockarg  => 'anonymous block parameter is also used within block',

  # Parser warnings
  :useless_else            => 'else without rescue is useless',
  :duplicate_hash_key      => 'key is duplicated and overwritten',
  :ambiguous_it_call       => '`it` calls without arguments refers to the first block param',

  # Parser errors that are not Ruby errors
  :invalid_encoding        => 'literal contains escape sequences incompatible with UTF-8',

  # Rewriter diagnostics
  :invalid_action          => 'cannot %{action}',
  :clobbered               => 'clobbered by: %{action}',

  # Rewriter diagnostics
  :different_replacements        => 'different replacements: %{replacement} vs %{other_replacement}',
  :swallowed_insertions          => 'this replacement:',
  :swallowed_insertions_conflict => 'swallows some inner rewriting actions:',
  :crossing_deletions            => 'the deletion of:',
  :crossing_deletions_conflict   => 'is crossing:',
  :crossing_insertions           => 'the rewriting action on:',
  :crossing_insertions_conflict  => 'is crossing that on:',
}.freeze

Class Method Summary collapse

Class Method Details

.warn_syntax_deviation(feature, version) ⇒ Object



5
6
7
8
9
# File 'lib/parser/current.rb', line 5

def warn_syntax_deviation(feature, version)
  warn "warning: parser/current is loading #{feature}, which recognizes " \
    "#{version}-compliant syntax, but you are running #{RUBY_VERSION}.\n" \
    "Please see https://github.com/whitequark/parser#compatibility-with-ruby-mri."
end