|
2 | 2 |
|
3 | 3 | use either::Either;
|
4 | 4 | use hir::{Semantics, Type};
|
| 5 | +use parser::T; |
5 | 6 | use syntax::{
|
6 |
| - algo::non_trivia_sibling, |
7 | 7 | ast::{self, HasArgList, HasName},
|
8 |
| - AstNode, Direction, SyntaxToken, TextRange, |
| 8 | + AstNode, NodeOrToken, SyntaxToken, |
9 | 9 | };
|
10 | 10 |
|
11 | 11 | use crate::RootDatabase;
|
@@ -59,32 +59,24 @@ pub fn callable_for_node(
|
59 | 59 | calling_node: &ast::CallableExpr,
|
60 | 60 | token: &SyntaxToken,
|
61 | 61 | ) -> Option<(hir::Callable, Option<usize>)> {
|
62 |
| - let callable = match &calling_node { |
| 62 | + let callable = match calling_node { |
63 | 63 | ast::CallableExpr::Call(call) => {
|
64 | 64 | let expr = call.expr()?;
|
65 | 65 | sema.type_of_expr(&expr)?.adjusted().as_callable(sema.db)
|
66 | 66 | }
|
67 | 67 | ast::CallableExpr::MethodCall(call) => sema.resolve_method_call_as_callable(call),
|
68 | 68 | }?;
|
69 | 69 | let active_param = if let Some(arg_list) = calling_node.arg_list() {
|
70 |
| - let account_for_ws = |arg: &ast::Expr| { |
71 |
| - let node = arg.syntax().clone(); |
72 |
| - let left = non_trivia_sibling(node.clone().into(), Direction::Prev) |
73 |
| - .and_then(|it| it.into_token())? |
74 |
| - .text_range(); |
75 |
| - let right = non_trivia_sibling(node.into(), Direction::Next) |
76 |
| - .and_then(|it| it.into_token())? |
77 |
| - .text_range(); |
78 |
| - Some(TextRange::new(left.end(), right.start())) |
79 |
| - }; |
80 |
| - arg_list |
81 |
| - .args() |
82 |
| - .position(|arg| { |
83 |
| - account_for_ws(&arg) |
84 |
| - .unwrap_or(arg.syntax().text_range()) |
85 |
| - .contains(token.text_range().start()) |
86 |
| - }) |
87 |
| - .or(Some(0)) |
| 70 | + dbg!(token); |
| 71 | + Some( |
| 72 | + arg_list |
| 73 | + .syntax() |
| 74 | + .children_with_tokens() |
| 75 | + .filter_map(NodeOrToken::into_token) |
| 76 | + .filter(|t| t.kind() == T![,]) |
| 77 | + .take_while(|t| dbg!(t).text_range().start() <= token.text_range().start()) |
| 78 | + .count(), |
| 79 | + ) |
88 | 80 | } else {
|
89 | 81 | None
|
90 | 82 | };
|
|
0 commit comments