Reads the file index and extracts each file into the gem directory.
Ensures that files can’t be installed outside the gem directory.
Extracts only the bin/ files from the gem into the gem directory. This is used by default gems to allow a gem-aware stub to function without the full gem installed.
Extracts the Gem::Specification
and raw metadata from the .gem file at path
.
Extracts the files in this package into destination_dir
If pattern
is specified, only entries matching that glob will be extracted.
Prepares the gem for signing and checksum generation. If a signing certificate and key are not present only checksum generation is set up.
Creates or an HTTP connection based on uri
, or retrieves an existing connection, using a proxy if needed.
Resolve the requested dependencies against the gems available via Gem.path
and return an Array
of Specification objects to be activated.
Dump only the raw version string, not the complete object. It’s a string for backwards (RubyGems 1.3.5 and earlier) compatibility.
Load custom marshal format. It’s a string for backwards (RubyGems 1.3.5 and earlier) compatibility.
Returns the build_args
used to install the gem
Sets the rubygems_version
to the current RubyGems version.
Display a warning on stderr. Will ask question
if it is not nil.
Display an error message in a location expected to get error messages. Will ask question
if it is not nil.
Terminate the application with exit code status
, running any exit handlers that might have been defined.
A neighbor is code that is at or above the current indent line.
First we build a block with all neighbors. If we can’t go further then we decrease the indentation threshold and expand via indentation i.e. ‘expand_indent`
Handles two general cases.
## Case #1: Check code inside of methods/classes/etc.
It’s important to note, that not everything in a given indentation level can be parsed as valid code even if it’s part of valid code. For example:
1 hash = { 2 name: "richard", 3 dog: "cinco", 4 }
In this case lines 2 and 3 will be neighbors, but they’re invalid until ‘expand_indent` is called on them.
When we are adding code within a method or class (at the same indentation level), use the empty lines to denote the programmer intended logical chunks. Stop and check each one. For example:
1 def dog 2 print "dog" 3 4 hash = { 5 end
If we did not stop parsing at empty newlines then the block might mistakenly grab all the contents (lines 2, 3, and 4) and report them as being problems, instead of only line 4.
## Case #2: Expand/grab other logical blocks
Once the search algorithm has converted all lines into blocks at a given indentation it will then ‘expand_indent`. Once the blocks that generates are expanded as neighbors we then begin seeing neighbors being other logical blocks i.e. a block’s neighbors may be another method or class (something with keywords/ends).
For example:
1 def bark 2 3 end 4 5 def sit 6 end
In this case if lines 4, 5, and 6 are in a block when it tries to expand neighbors it will expand up. If it stops after line 2 or 3 it may cause problems since there’s a valid kw/end pair, but the block will be checked without it.
We try to resolve this edge case with ‘lookahead_balance_one_line` below.
Used to hide lines
The search alorithm will group lines into blocks then if those blocks are determined to represent valid code they will be hidden