Copilot commented on code in PR #7167:
URL: https://github.com/apache/hbase/pull/7167#discussion_r2225849488
##########
hbase-shell/src/main/ruby/irb/hirb.rb:
##########
@@ -23,6 +23,70 @@ module IRB
# Subclass of IRB so can intercept methods
class HIRB < Irb
+ # Method for checking the variable name conflict with the hbase command
name
+ def check_variable_assignment_conflict(line)
+ # checks when a single variable is defined at a time (eg a = 10) or
multiple variable assignment (e.g., a,b,c = 1,2,3)
+ single_match =
line.strip.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.+)/)
+ multiple_match =
line.strip.match(/^([a-zA-Z_][a-zA-Z0-9_]*(?:\s*,\s*[a-zA-Z_][a-zA-Z0-9_]*)+)\s*=\s*(.+)/)
+
+ # Match comma-based expressions that may result in nil assignment to
a variable
+ comma_expression =
line.strip.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*,\s*(.+)/)
+
+ variable_names = []
+
+ if multiple_match
+ # Extract all variable names during multiple assignment
+ left_side = multiple_match[1]
+ variable_names = left_side.split(',').map(&:strip)
+ elsif single_match
+ # Extracting variable name for single assignment
+ variable_names = [single_match[1]]
+ elsif comma_expression
+ # Handle comma expressions that create variables (like
list_namespace,'ns.*')
+ variable_names = [comma_expression[1]]
+ else
+ # if no assignment pattern found
+ return false
+ end
+
+ # return false if variable_names is empty
+ return false if variable_names.empty?
+
+ receiver = @context.workspace.binding.receiver
+ conflicting_variables = []
+
+ # Checking variable names for conflicts with the HBase shell command
names
+ variable_names.each do |variable_name|
+ conflicts = []
+
+ # if variable is defined as the command name adding it to
conflicts list
+ if defined?(::Shell) && ::Shell.respond_to?(:commands) &&
::Shell.commands.key?(variable_name)
+ conflicts << "HBase command"
+ end
+
+ # If this variable has conflicts, add it to the list
+ unless conflicts.empty?
+ conflicting_variables << {
+ name: variable_name,
+ conflicts: conflicts
+ }
+ end
+ end
+
+ # If any conflicts found, block the entire assignment
+ unless conflicting_variables.empty?
+ puts "ERROR: Cannot create variable assignment"
+ conflicting_variables.each do |var_info|
+ puts "'#{var_info[:name]}' conflicts with:
#{var_info[:conflicts].join(', ')}"
+ end
+ puts "This could cause unexpected behavior or make commands
unusable"
+ puts "Please use different variable names"
+ puts
+ return true # Block assignment
+ end
+ return false # Allow assignment
+ end
Review Comment:
The method has inconsistent indentation. It should use 6 spaces to match the
class indentation level, not 8 spaces.
```suggestion
# Method for checking the variable name conflict with the hbase command
name
def check_variable_assignment_conflict(line)
# checks when a single variable is defined at a time (eg a = 10) or
multiple variable assignment (e.g., a,b,c = 1,2,3)
single_match =
line.strip.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.+)/)
multiple_match =
line.strip.match(/^([a-zA-Z_][a-zA-Z0-9_]*(?:\s*,\s*[a-zA-Z_][a-zA-Z0-9_]*)+)\s*=\s*(.+)/)
# Match comma-based expressions that may result in nil assignment to
a variable
comma_expression =
line.strip.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*,\s*(.+)/)
variable_names = []
if multiple_match
# Extract all variable names during multiple assignment
left_side = multiple_match[1]
variable_names = left_side.split(',').map(&:strip)
elsif single_match
# Extracting variable name for single assignment
variable_names = [single_match[1]]
elsif comma_expression
# Handle comma expressions that create variables (like
list_namespace,'ns.*')
variable_names = [comma_expression[1]]
else
# if no assignment pattern found
return false
end
# return false if variable_names is empty
return false if variable_names.empty?
receiver = @context.workspace.binding.receiver
conflicting_variables = []
# Checking variable names for conflicts with the HBase shell command
names
variable_names.each do |variable_name|
conflicts = []
# if variable is defined as the command name adding it to
conflicts list
if defined?(::Shell) && ::Shell.respond_to?(:commands) &&
::Shell.commands.key?(variable_name)
conflicts << "HBase command"
end
# If this variable has conflicts, add it to the list
unless conflicts.empty?
conflicting_variables << {
name: variable_name,
conflicts: conflicts
}
end
end
# If any conflicts found, block the entire assignment
unless conflicting_variables.empty?
puts "ERROR: Cannot create variable assignment"
conflicting_variables.each do |var_info|
puts "'#{var_info[:name]}' conflicts with:
#{var_info[:conflicts].join(', ')}"
end
puts "This could cause unexpected behavior or make commands
unusable"
puts "Please use different variable names"
puts
return true # Block assignment
end
return false # Allow assignment
end
```
##########
hbase-shell/src/main/ruby/irb/hirb.rb:
##########
@@ -23,6 +23,70 @@ module IRB
# Subclass of IRB so can intercept methods
class HIRB < Irb
+ # Method for checking the variable name conflict with the hbase command
name
+ def check_variable_assignment_conflict(line)
+ # checks when a single variable is defined at a time (eg a = 10) or
multiple variable assignment (e.g., a,b,c = 1,2,3)
+ single_match =
line.strip.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.+)/)
+ multiple_match =
line.strip.match(/^([a-zA-Z_][a-zA-Z0-9_]*(?:\s*,\s*[a-zA-Z_][a-zA-Z0-9_]*)+)\s*=\s*(.+)/)
+
+ # Match comma-based expressions that may result in nil assignment to
a variable
+ comma_expression =
line.strip.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*,\s*(.+)/)
+
+ variable_names = []
+
+ if multiple_match
+ # Extract all variable names during multiple assignment
+ left_side = multiple_match[1]
+ variable_names = left_side.split(',').map(&:strip)
+ elsif single_match
+ # Extracting variable name for single assignment
+ variable_names = [single_match[1]]
+ elsif comma_expression
+ # Handle comma expressions that create variables (like
list_namespace,'ns.*')
+ variable_names = [comma_expression[1]]
+ else
+ # if no assignment pattern found
+ return false
+ end
+
+ # return false if variable_names is empty
+ return false if variable_names.empty?
+
+ receiver = @context.workspace.binding.receiver
+ conflicting_variables = []
+
+ # Checking variable names for conflicts with the HBase shell command
names
+ variable_names.each do |variable_name|
+ conflicts = []
+
+ # if variable is defined as the command name adding it to
conflicts list
+ if defined?(::Shell) && ::Shell.respond_to?(:commands) &&
::Shell.commands.key?(variable_name)
+ conflicts << "HBase command"
+ end
+
+ # If this variable has conflicts, add it to the list
+ unless conflicts.empty?
+ conflicting_variables << {
+ name: variable_name,
+ conflicts: conflicts
Review Comment:
The variable 'conflicts' is initialized inside the loop but only used to
check if ::Shell.commands.key?(variable_name). This can be simplified by
directly checking the condition without the intermediate array.
```suggestion
# Check if the variable name conflicts with HBase shell command
names
if defined?(::Shell) && ::Shell.respond_to?(:commands) &&
::Shell.commands.key?(variable_name)
conflicting_variables << {
name: variable_name,
conflicts: ["HBase command"]
```
##########
hbase-shell/src/main/ruby/irb/hirb.rb:
##########
@@ -112,6 +176,7 @@ def eval_input
signal_status(:IN_EVAL) do
begin
line.untaint
+ next if check_variable_assignment_conflict(line)
Review Comment:
The indentation is inconsistent with the surrounding code. This line should
have 14 spaces to align with the other statements in the begin block.
```suggestion
next if check_variable_assignment_conflict(line)
```
##########
hbase-shell/src/main/ruby/irb/hirb.rb:
##########
@@ -112,6 +176,7 @@ def eval_input
signal_status(:IN_EVAL) do
begin
line.untaint
Review Comment:
The 'untaint' method has been deprecated and removed in Ruby 3.2+. This
could cause compatibility issues with newer Ruby versions.
```suggestion
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]