Tom Hvitved
29cd346702
Ruby: Reduce non-linear recursion in CFG completion library
...
Before
```
noinline
incremental
Completion::nestedEnsureCompletion#ff(/* Completion::Completion */ Completion::TCompletion outer,
int nestLevel)
:-
(
(
Completion::TReturnCompletion#f(outer),
rec Completion::Completion#class#f(outer)
);
(
Completion::TBreakCompletion#f(outer),
rec Completion::Completion#class#f(outer)
);
(
Completion::TNextCompletion#f(outer),
rec Completion::Completion#class#f(outer)
);
(
Completion::TRedoCompletion#f(outer),
rec Completion::Completion#class#f(outer)
);
(
Completion::TRetryCompletion#f(outer),
rec Completion::Completion#class#f(outer)
);
(
Completion::TRaiseCompletion#f(outer),
rec Completion::Completion#class#f(outer)
);
(
Completion::TExitCompletion#f(outer),
rec Completion::Completion#class#f(outer)
)
),
exists(/* ControlFlowGraphImpl::Trees::BodyStmtTree */ cached dontcare AST::Cached::TAstNode _ |
ControlFlowGraphImpl::Trees::BodyStmtTree::getNestLevel_dispred#ff(_,
nestLevel)
)
| [base_case] false()
| [delta_order]
(
(
Completion::TReturnCompletion#f(outer),
delta previous rec Completion::Completion#class#f(outer)
);
(
Completion::TBreakCompletion#f(outer),
delta previous rec Completion::Completion#class#f(outer)
);
(
Completion::TNextCompletion#f(outer),
delta previous rec Completion::Completion#class#f(outer)
);
(
Completion::TRedoCompletion#f(outer),
delta previous rec Completion::Completion#class#f(outer)
);
(
Completion::TRetryCompletion#f(outer),
delta previous rec Completion::Completion#class#f(outer)
);
(
Completion::TRaiseCompletion#f(outer),
delta previous rec Completion::Completion#class#f(outer)
);
(
Completion::TExitCompletion#f(outer),
delta previous rec Completion::Completion#class#f(outer)
)
),
project#ControlFlowGraphImpl::Trees::BodyStmtTree::getNestLevel_dispred#ff(nestLevel),
not(previous rec Completion::nestedEnsureCompletion#ff(outer, nestLevel))
.
```
After
```
noinline
Completion::nestedEnsureCompletion#ff(Completion::TCompletion outer,
int nestLevel)
:-
(
Completion::TReturnCompletion#f(outer);
Completion::TBreakCompletion#f(outer);
Completion::TNextCompletion#f(outer);
Completion::TRedoCompletion#f(outer);
Completion::TRetryCompletion#f(outer);
Completion::TRaiseCompletion#f(outer);
Completion::TExitCompletion#f(outer)
),
project#ControlFlowGraphImpl::Trees::BodyStmtTree::getNestLevel_dispred#ff(nestLevel)
.
```
2021-12-20 19:22:47 +01:00
Alex Ford
313e0c63fd
Merge pull request #7399 from github/ruby/stdlib-logger
...
Ruby: Model what is written to the log from stdlib `Logger` methods
2021-12-20 09:52:29 +00:00
Tom Hvitved
e4d9f5f29e
Fix QL doc
2021-12-17 13:14:11 +01:00
Tom Hvitved
ab2e0fdb18
Data flow: Sync files
2021-12-17 13:13:36 +01:00
Arthur Baars
3ef707e358
Address comment
2021-12-16 15:38:41 +01:00
Arthur Baars
cdbd8b27d3
Ruby: SimpleParameter is not an Expr
2021-12-16 15:38:40 +01:00
Tom Hvitved
e9ef53c31b
Merge pull request #7390 from hvitved/ruby/deprecate-pattern-classes
...
Ruby: Deprecate `Pattern` classes
2021-12-16 14:36:13 +01:00
Tom Hvitved
4ccf9bf67c
Address review comments
2021-12-15 19:57:27 +01:00
Tom Hvitved
c6696adfde
Ruby: Add test case that would make old module resolution library diverge
2021-12-15 15:18:42 +01:00
Tom Hvitved
2187994f5c
Ruby: Prevent infinite recursion in module resolution library
2021-12-15 15:15:19 +01:00
Harry Maclean
062f7fe390
Merge pull request #7340 from github/hmac/private-methods
...
Ruby: handle private module methods
2021-12-15 21:07:49 +13:00
Harry Maclean
a32711245f
Ruby: Further speed up private method modelling
2021-12-15 17:38:52 +13:00
Alex Ford
5fa6ecc5f1
Ruby: Model what is written to the log from stdlib Logger methods
2021-12-14 17:39:12 +00:00
Tom Hvitved
e882cdaca4
Ruby: Add missing getCallable() for nested destructured parameters
2021-12-14 15:04:40 +01:00
Tom Hvitved
10b2a0a54a
Ruby: Add test for nested destructured parameters
2021-12-14 15:04:40 +01:00
Tom Hvitved
9ea8b20e77
Ruby: Deprecate Pattern classes
2021-12-14 15:04:40 +01:00
Alex Ford
3262a14f22
Ruby: use DataFlow::CallNode#getBlock to remove a cast
2021-12-14 13:23:38 +00:00
Alex Ford
f3dcccb64b
Ruby: Add getBlock and getNumberOfArguments predicates to DataFlow::CallNode
2021-12-14 12:58:15 +00:00
Harry Maclean
f21948d0ca
Ruby: Speed up private method modelling
2021-12-14 11:10:38 +13:00
Nick Rolfe
dc27089714
Merge pull request #7375 from github/nickrolfe/cargo_update
...
Ruby: update crate versions
2021-12-13 18:16:29 +00:00
Nick Rolfe
b18f7a9bd7
Ruby: update crate versions
2021-12-13 15:37:35 +00:00
Alex Ford
4ae92667e1
Ruby: use Ruby object instantiation syntax in a comment
2021-12-13 12:54:45 +00:00
Harry Maclean
6223b166c2
Update test fixtures
...
At the same time, rename some classes in `private.rb` so they don't
interact with identically-named modules in `calls.rb`.
2021-12-13 16:24:25 +13:00
Harry Maclean
e1d290d4c0
Ruby: Don't count private methods as Rails actions
...
Private instance methods on ActionController classes aren't valid
request handlers. Routing to them will raise an exception.
2021-12-13 15:36:55 +13:00
Nick Rolfe
b80a84c156
Merge pull request #7341 from github/nickrolfe/cookies
2021-12-10 19:52:23 +00:00
Andrew Eisenberg
66c1629974
Merge pull request #7285 from github/post-release-prep-2.7.3-ddd4ccbb
...
Post-release preparation 2.7.3
2021-12-10 09:59:45 -08:00
Nick Rolfe
b6c5b4d213
Ruby: define ActionViewCookiesCall
2021-12-10 16:36:26 +00:00
Tom Hvitved
657cd89286
Merge pull request #7347 from hvitved/cfg/more-consistency-tests
...
Shared CFG: Add two more consistency queries
2021-12-10 10:50:39 +01:00
Arthur Baars
13f7fd88f1
Merge pull request #7283 from aibaars/ruby-pattern-matching-cfg
...
Ruby: pattern matching: CFG
2021-12-10 10:24:38 +01:00
Tom Hvitved
70f76d06c7
Shared CFG: Add two more consistency queries
2021-12-10 09:56:50 +01:00
Arthur Baars
fd4915a564
Ruby: CFG: add default implementation for getAnInnerCompatibleCompletion
2021-12-09 15:23:26 +01:00
Arthur Baars
9d288c90a5
Ruby: CFG: better return type for getAMatchingSuccessorType
2021-12-09 15:23:26 +01:00
Arthur Baars
a7b3f1370f
Ruby: CFG: add test case
2021-12-09 15:23:26 +01:00
Arthur Baars
d0aa307bd3
Ruby: CFG: fix multiple successors failure for default parameters
2021-12-09 15:23:26 +01:00
Tom Hvitved
b887165005
Ruby: Code review suggestions
2021-12-09 15:23:26 +01:00
Arthur Baars
3689481c18
Ruby: CFG: make Completion.isValidFor work for getSugared AST nodes
2021-12-09 15:23:26 +01:00
Arthur Baars
660e52f2bf
Ruby: CFG: make VariableReferencePattern a PreOrder node
2021-12-09 15:23:26 +01:00
Arthur Baars
e9e3ef3ea2
Ruby: 'self' is not really a local variable
2021-12-09 15:23:26 +01:00
Arthur Baars
799c945299
Ruby: fix CFG for AsPattern
2021-12-09 15:23:26 +01:00
Arthur Baars
95f8f85aa2
Ruby: fix allowed completions for desugared CasePatterns
2021-12-09 15:23:26 +01:00
Arthur Baars
aacba0b522
Ruby: CFG: add test cases for pattern matching
2021-12-09 15:23:26 +01:00
Arthur Baars
513fe09dbb
Treat class names in array/find/hash patterns as sub-patterns
2021-12-09 15:23:26 +01:00
Arthur Baars
d17c055139
CFG
2021-12-09 15:23:25 +01:00
Arthur Baars
44a615839d
Add test case with rest variable and no prefix elements
2021-12-09 15:23:25 +01:00
Arthur Baars
f08eb8e616
Revert "Temporarily allow CFG inconsistencies"
...
This reverts commit dca1e34cd8 .
2021-12-09 15:23:25 +01:00
Tom Hvitved
cbc96dba8a
Shared CFG: Add another consistency test
...
Finds nodes with multiple normal successors, where one is the special simple
successor. For example, this would flag a node that has both a "simple" and
a "true" successor.
2021-12-09 15:08:19 +01:00
Tom Hvitved
9ffa236c51
Merge pull request #7288 from hvitved/cfg/enclosing-scope
...
Shared CFG: Include CFG scope in `TElementNode`
2021-12-09 13:39:48 +01:00
Nick Rolfe
d46564caa6
Ruby: treat ActionController#cookies as a remote flow source
2021-12-09 12:13:17 +00:00
Nick Rolfe
f6a8b9a7e5
Ruby: add cookies call to frameworks test
2021-12-09 12:07:04 +00:00
Harry Maclean
8df5aaa797
Ruby: Model private class methods
...
`Module#private_class_method` takes a symbol representing the name of a
method in the current module scope and makes that module private. This
is similar to `private`, but applies only to class (singleton) methods.
Unlike `private`, it must be called with an argument, and does not
change the ambient visibility for any subsequent method definitions.
class Foo
def public
end
def private1
end
private_class_method :private1
# This alternate form works because method definition
# returns its name as a symbol:
private_class_method def private2
end
end
2021-12-09 18:15:25 +13:00