mirror of
				https://gitea.invidious.io/iv-org/shard-ameba.git
				synced 2024-08-15 00:53:29 +00:00 
			
		
		
		
	Add remove_preceding, remove_leading, remove_trailing
				
					
				
			This commit is contained in:
		
							parent
							
								
									1b6fe40a3b
								
							
						
					
					
						commit
						d51ef27d54
					
				
					 1 changed files with 38 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -46,6 +46,25 @@ class Ameba::Source
 | 
			
		|||
      @rewriter.insert_after(loc_to_pos(location) + 1, content)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Removes *size* characters prior to the source range.
 | 
			
		||||
    def remove_preceding(location, end_location, size)
 | 
			
		||||
      @rewriter.remove(loc_to_pos(location) - size, loc_to_pos(location))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Removes *size* characters from the beginning of the given range.
 | 
			
		||||
    # If *size* is greater than the size of the range, the removed region can
 | 
			
		||||
    # overrun the end of the range.
 | 
			
		||||
    def remove_leading(location, end_location, size)
 | 
			
		||||
      remove(loc_to_pos(location), loc_to_pos(location) + size)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Removes *size* characters from the end of the given range.
 | 
			
		||||
    # If *size* is greater than the size of the range, the removed region can
 | 
			
		||||
    # overrun the beginning of the range.
 | 
			
		||||
    def remove_trailing(location, end_location, size)
 | 
			
		||||
      remove(loc_to_pos(end_location) + 1 - size, loc_to_pos(end_location) + 1)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    private def loc_to_pos(location : Crystal::Location | {Int32, Int32})
 | 
			
		||||
      if location.is_a?(Crystal::Location)
 | 
			
		||||
        line, column = location.line_number, location.column_number
 | 
			
		||||
| 
						 | 
				
			
			@ -80,6 +99,25 @@ class Ameba::Source
 | 
			
		|||
      insert_after(end_location(node), content)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Removes *size* characters prior to the given node.
 | 
			
		||||
    def remove_preceding(node : Crystal::ASTNode, size)
 | 
			
		||||
      remove_preceding(location(node), end_location(node), size)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Removes *size* characters from the beginning of the given node.
 | 
			
		||||
    # If *size* is greater than the size of the node, the removed region can
 | 
			
		||||
    # overrun the end of the node.
 | 
			
		||||
    def remove_leading(node : Crystal::ASTNode, size)
 | 
			
		||||
      remove_leading(location(node), end_location(node), size)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Removes *size* characters from the end of the given node.
 | 
			
		||||
    # If *size* is greater than the size of the node, the removed region can
 | 
			
		||||
    # overrun the beginning of the node.
 | 
			
		||||
    def remove_trailing(node : Crystal::ASTNode, size)
 | 
			
		||||
      remove_trailing(location(node), end_location(node), size)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    private def location(node : Crystal::ASTNode)
 | 
			
		||||
      node.location || raise "Missing location"
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue