Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion lib/lrama/warnings/implicit_empty.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ def warn(grammar)

grammar.rule_builders.each do |builder|
if builder.rhs.empty?
@logger.warn("warning: empty rule without %empty")
lhs = builder.lhs #: Lrama::Lexer::Token::Base
@logger.warn(lhs.location.generate_error_message("empty rule for #{lhs.s_value} without %empty").chomp)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/lrama/warnings/mixed_references.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def warn(grammar)
build_grouped_usage(grammar).each do |rule, usage|
next unless usage[:positional] && usage[:named]

@logger.warn("warning: rule `#{rule.as_comment}` mixes positional and named references; use named references consistently")
@logger.warn("rule `#{rule.as_comment}` mixes positional and named references; use named references consistently")
end
end

Expand Down
2 changes: 1 addition & 1 deletion lib/lrama/warnings/name_conflicts.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def check_conflicts(parameterized_rules, symbol_names)
parameterized_rules.each do |param_rule|
next unless symbol_names.include?(param_rule.name)

@logger.warn("warning: parameterized rule name \"#{param_rule.name}\" conflicts with symbol name")
@logger.warn("parameterized rule name \"#{param_rule.name}\" conflicts with symbol name")
end
end
end
Expand Down
14 changes: 9 additions & 5 deletions spec/lrama/warnings/implicit_empty_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,20 @@
end

context "when warnings true" do
it "has warns for parameterized rule redefined" do
it "warns with the rule location" do
grammar = Lrama::Parser.new(y, "states/empty.y").parse
grammar.prepare
grammar.validate!
states = Lrama::States.new(grammar, Lrama::Tracer.new(Lrama::Logger.new))
states.compute
logger = Lrama::Logger.new
allow(logger).to receive(:warn)
out = StringIO.new
logger = Lrama::Logger.new(out)
Lrama::Warnings.new(logger, true).warn(grammar, states)
expect(logger).to have_received(:warn).with("warning: empty rule without %empty")
expect(out.string).to eq(<<~WARNING)
warning: states/empty.y:9:0: empty rule for program without %empty
9 | program: /* empty */
| ^~~~~~~
WARNING
end
end

Expand All @@ -42,7 +46,7 @@
logger = Lrama::Logger.new
allow(logger).to receive(:warn)
Lrama::Warnings.new(logger, false).warn(grammar, states)
expect(logger).not_to have_received(:warn).with("warning: empty rule without %empty")
expect(logger).not_to have_received(:warn)
end
end
end
Expand Down
16 changes: 8 additions & 8 deletions spec/lrama/warnings/mixed_references_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@

Lrama::Warnings.new(logger, true).warn(grammar, states)

expect(logger).to have_received(:warn).with("warning: rule `expr: NUM NUM` mixes positional and named references; use named references consistently")
expect(logger).to have_received(:warn).with("rule `expr: NUM NUM` mixes positional and named references; use named references consistently")
end

it "does not warn when named references are used consistently" do
Expand Down Expand Up @@ -100,7 +100,7 @@

Lrama::Warnings.new(logger, true).warn(grammar, states)

expect(logger).to have_received(:warn).with(/warning: rule `expr: .*` mixes positional and named references; use named references consistently/).once
expect(logger).to have_received(:warn).with(/rule `expr: .*` mixes positional and named references; use named references consistently/).once
end

it "does not warn when positional references are used consistently" do
Expand Down Expand Up @@ -165,7 +165,7 @@

Lrama::Warnings.new(logger, true).warn(grammar, states)

expect(logger).to have_received(:warn).with("warning: rule `expr: NUM` mixes positional and named references; use named references consistently")
expect(logger).to have_received(:warn).with("rule `expr: NUM` mixes positional and named references; use named references consistently")
end

it "warns when mixing address-of location references and named value references" do
Expand Down Expand Up @@ -198,7 +198,7 @@

Lrama::Warnings.new(logger, true).warn(grammar, states)

expect(logger).to have_received(:warn).with("warning: rule `expr: NUM NUM` mixes positional and named references; use named references consistently")
expect(logger).to have_received(:warn).with("rule `expr: NUM NUM` mixes positional and named references; use named references consistently")
end

it "warns when mixing index and named value references" do
Expand Down Expand Up @@ -231,7 +231,7 @@

Lrama::Warnings.new(logger, true).warn(grammar, states)

expect(logger).to have_received(:warn).with("warning: rule `expr: NUM` mixes positional and named references; use named references consistently")
expect(logger).to have_received(:warn).with("rule `expr: NUM` mixes positional and named references; use named references consistently")
end

it "does not warn when using only special and positional index references" do
Expand Down Expand Up @@ -296,7 +296,7 @@

Lrama::Warnings.new(logger, true).warn(grammar, states)

expect(logger).to have_received(:warn).with("warning: rule `expr: NUM` mixes positional and named references; use named references consistently")
expect(logger).to have_received(:warn).with("rule `expr: NUM` mixes positional and named references; use named references consistently")
end

it "does not warn when mixing special LHS and positional references" do
Expand Down Expand Up @@ -458,7 +458,7 @@

Lrama::Warnings.new(logger, true).warn(grammar, states)

expect(logger).to have_received(:warn).with("warning: rule `expr: LEFT tPLUS RIGHT` mixes positional and named references; use named references consistently")
expect(logger).to have_received(:warn).with("rule `expr: LEFT tPLUS RIGHT` mixes positional and named references; use named references consistently")
end

it "warns when mixing tagged LHS alias and positional references" do
Expand Down Expand Up @@ -490,7 +490,7 @@

Lrama::Warnings.new(logger, true).warn(grammar, states)

expect(logger).to have_received(:warn).with("warning: rule `expr: NUM` mixes positional and named references; use named references consistently")
expect(logger).to have_received(:warn).with("rule `expr: NUM` mixes positional and named references; use named references consistently")
end
end

Expand Down
8 changes: 4 additions & 4 deletions spec/lrama/warnings/name_conflicts_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
logger = Lrama::Logger.new
allow(logger).to receive(:warn)
Lrama::Warnings.new(logger, true).warn(grammar, states)
expect(logger).to have_received(:warn).with('warning: parameterized rule name "option" conflicts with symbol name')
expect(logger).to have_received(:warn).with('parameterized rule name "option" conflicts with symbol name')
end
end

Expand Down Expand Up @@ -78,7 +78,7 @@
logger = Lrama::Logger.new
allow(logger).to receive(:warn)
Lrama::Warnings.new(logger, true).warn(grammar, states)
expect(logger).to have_received(:warn).with('warning: parameterized rule name "program" conflicts with symbol name')
expect(logger).to have_received(:warn).with('parameterized rule name "program" conflicts with symbol name')
end
end

Expand Down Expand Up @@ -193,8 +193,8 @@
logger = Lrama::Logger.new
allow(logger).to receive(:warn)
Lrama::Warnings.new(logger, true).warn(grammar, states)
expect(logger).to have_received(:warn).with('warning: parameterized rule name "option" conflicts with symbol name')
expect(logger).to have_received(:warn).with('warning: parameterized rule name "separated" conflicts with symbol name')
expect(logger).to have_received(:warn).with('parameterized rule name "option" conflicts with symbol name')
expect(logger).to have_received(:warn).with('parameterized rule name "separated" conflicts with symbol name')
end
end
end
Expand Down