returns an integer in (-infty, 0] a number closer to 0 means the dependency is less constraining
dependencies w/ 0 or 1 possibilities (ignoring version requirements) are given very negative values, so they always sort first, before dependencies that are unconstrained
Returns a Gem::StubSpecification
for default gems
Removes spec
from the known specs.
Return the latest specs, optionally including prerelease specs if prerelease
is true.
Sanitize a single string.
Creates a duplicate spec without large blobs that aren’t used at runtime.
Returns an object you can use to sort specifications in sort_by.
Returns a Ruby code representation of this specification, such that it can be eval’ed and reconstruct the same specification later. Attributes that still have their default values are omitted.
Returns self
Removes spec
from the record.
Return the latest specs in the record, optionally including prerelease specs if prerelease
is true.
Uninstalls gem spec
Removes installed executables and batch files (windows only) for spec
.
Regenerates plugin wrappers after removal.
Display an error message in a location expected to get error messages. Will ask question
if it is not nil.
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.