Skip to content

Add refactoring: inline function #29096

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 71 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
afa26b6
Add inline local all simple
D0nGiovanni Nov 7, 2018
d55c35c
Fix literals not being able to be replaced
D0nGiovanni Nov 8, 2018
aa4e9e9
Implement inline here
D0nGiovanni Nov 8, 2018
3cf35be
Clean style
D0nGiovanni Nov 8, 2018
cd6453a
Clean style
D0nGiovanni Nov 8, 2018
89d1771
Add refactoring availability tests
D0nGiovanni Nov 8, 2018
d6cd0fa
Make inline local not available for edge cases
D0nGiovanni Nov 8, 2018
3117926
Fix lint issues
D0nGiovanni Nov 8, 2018
2608548
Fix tests
D0nGiovanni Nov 9, 2018
8b569fb
Remove default from prohibited modifiers
D0nGiovanni Nov 9, 2018
1649f91
Split up test cases
D0nGiovanni Nov 9, 2018
eb13a0d
Extract is assigned check
D0nGiovanni Nov 9, 2018
51e3451
Add parentheses dynamically
D0nGiovanni Nov 9, 2018
6f1f0e1
Fix style
D0nGiovanni Nov 9, 2018
cfe1af7
Add precedence tests
D0nGiovanni Nov 9, 2018
e887248
Fix unnecessary parentheses in CallExpression
D0nGiovanni Nov 13, 2018
dfdc2b3
Implement review feedback
D0nGiovanni Nov 13, 2018
83bbe77
Update to new Refactor interface
D0nGiovanni Nov 14, 2018
b99292c
Correct simple testcases
D0nGiovanni Nov 14, 2018
12648b5
Add function call argument testcase
D0nGiovanni Nov 14, 2018
071a3e3
Remove dead code
D0nGiovanni Nov 14, 2018
ec3e7df
Fix parenthesization
D0nGiovanni Nov 15, 2018
6e7a96f
Add stubs
D0nGiovanni Nov 15, 2018
96684ed
Add tests
D0nGiovanni Nov 16, 2018
f6af2a0
Fix multireturn test
D0nGiovanni Nov 16, 2018
4d128a4
Fix lint errors
D0nGiovanni Nov 16, 2018
dfad3ba
Fix test breaking bug
D0nGiovanni Nov 16, 2018
d44fec3
Write getInfo
D0nGiovanni Nov 16, 2018
6e70a4b
Extract findDescendants function
D0nGiovanni Nov 16, 2018
be09d6d
Make getReferencesInScope more generic
D0nGiovanni Nov 16, 2018
029752a
Fix function call
D0nGiovanni Nov 16, 2018
045a5b5
Implement simple cases
D0nGiovanni Nov 16, 2018
9dd9acb
Extract common inline code
D0nGiovanni Nov 17, 2018
830d9cc
Fix test
D0nGiovanni Nov 17, 2018
a2eaeda
Add support for function parameters WIP
D0nGiovanni Nov 17, 2018
7bbcdfd
Fix missing marker in tests
D0nGiovanni Nov 21, 2018
9544cd1
Add support to resolve parameter name conflict
D0nGiovanni Nov 21, 2018
58dfc25
Fix name conflict tests
D0nGiovanni Nov 21, 2018
15419b0
Add locals name resolution WIP
D0nGiovanni Nov 22, 2018
910c2d9
Add multiple parameters name conflict test
D0nGiovanni Nov 22, 2018
9760010
Add inline method
D0nGiovanni Nov 22, 2018
8c496d3
Fix locals name conflict resolution
D0nGiovanni Nov 22, 2018
8bef152
Check if function has body
D0nGiovanni Nov 23, 2018
a00707e
Add transformation visitor
D0nGiovanni Nov 23, 2018
8ab9ed0
Inline functions with multiple return statements
D0nGiovanni Nov 24, 2018
fa75f76
Minor refactorings
D0nGiovanni Nov 24, 2018
b861746
Fix name conflict resolution for locals
D0nGiovanni Nov 24, 2018
a45a05e
Refactor renameMap population and getSafeName
D0nGiovanni Nov 24, 2018
4c9c14a
Add argument TypeNode
D0nGiovanni Nov 24, 2018
20d335d
Fix MultiReturn test
D0nGiovanni Nov 24, 2018
7d3668b
Fix tests
D0nGiovanni Nov 29, 2018
0fcd813
get symbol of call expression instead of selected token
D0nGiovanni Nov 29, 2018
c45a292
recognize undefined closures in target node
D0nGiovanni Nov 29, 2018
2e067ce
check names declared in inner scopes
D0nGiovanni Nov 29, 2018
bc6957c
Inline functions with destructuring
D0nGiovanni Nov 30, 2018
cc963cb
Correctly get method calls
D0nGiovanni Dec 5, 2018
8ec719c
Clean up comments
D0nGiovanni Dec 5, 2018
55e03b8
Clean-up code
D0nGiovanni Dec 5, 2018
e9e2e04
Clean code
D0nGiovanni Dec 6, 2018
3bbf824
Fix parenthesization
D0nGiovanni Nov 29, 2018
7dc4878
Move findDescendants to utilities.ts
D0nGiovanni Dec 6, 2018
e8591b1
More clean-up
D0nGiovanni Dec 6, 2018
582a513
Move inner functions
D0nGiovanni Dec 6, 2018
ac17bda
Split body declaration
D0nGiovanni Dec 6, 2018
623c047
Fix function heads
D0nGiovanni Dec 6, 2018
13a1e65
Move geSafeName & getReturnExpression
D0nGiovanni Dec 8, 2018
5c1aae8
Fix unresolved name conflict in return statement
D0nGiovanni Dec 8, 2018
ee8b1d1
Extract getInlineInfo from inlineAt
D0nGiovanni Dec 8, 2018
18b94d1
Allow inline here for exported functions
D0nGiovanni Dec 11, 2018
8879a35
Fix inline here with export
D0nGiovanni Dec 12, 2018
edc211e
Remove comments
D0nGiovanni Dec 19, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/compiler/diagnosticMessages.json
Original file line number Diff line number Diff line change
Expand Up @@ -4799,5 +4799,21 @@
"Add names to all parameters without names": {
"category": "Message",
"code": 95073
},
"Inline local": {
"category": "Message",
"code": 95074
},
"Inline here": {
"category": "Message",
"code": 95075
},
"Inline all": {
"category": "Message",
"code": 95076
},
"Inline function": {
"category": "Message",
"code": 95077
}
}
19 changes: 19 additions & 0 deletions src/compiler/utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,25 @@ namespace ts {
}
}

/**
* Collects all descendants whose predicate results in a truthy value.
* If no descendant is found, returns empty array.
*/
export function findDescendants<T extends Node>(node: Node | undefined, predicate: (element: Node) => element is T): ReadonlyArray<T>;
export function findDescendants(node: Node | undefined, callback: (element: Node) => boolean): ReadonlyArray<Node>;
export function findDescendants(node: Node, predicate: (n: Node) => boolean) {
const nodes: Node[] = [];
collectDescendants(node);
return nodes;

function collectDescendants(node: Node) {
forEachChild(node, n => {
if (predicate(n)) nodes.push(n);
collectDescendants(n);
});
}
}

/**
* Calls `callback` for each entry in the map, returning the first truthy result.
* Use `map.forEach` instead for normal iteration.
Expand Down
Loading