@@ -362,9 +362,9 @@ defmodule Spark.ElixirSense.Plugin do
362362 { ast , find_cursor_in_params ( params , call , meta ) }
363363 end
364364
365- defp find_call_pre ( { atom , meta , params } = ast , _state )
366- when is_atom ( atom ) and is_list ( params ) and atom not in [ :{} , :%{} ] do
367- { ast , find_cursor_in_params ( params , atom , meta ) }
365+ # Special handling for use calls
366+ defp find_call_pre ( { :use , meta , [ module_ast | params ] } = ast , _state ) do
367+ { ast , find_cursor_in_params ( [ module_ast | params ] , [ module_ast , :use ] , meta ) }
368368 end
369369
370370 defp find_call_pre ( { atom , meta , params } = ast , _state )
@@ -587,29 +587,35 @@ defmodule Spark.ElixirSense.Plugin do
587587 defp cursor_at_value_type_path ( _ ) , do: nil
588588
589589 defp autocomplete_spark_options ( hint , _ , { module , function_call , arg_index , info } , opts ) do
590- case Code . fetch_docs ( module ) do
591- { :docs_v1 , _a , :elixir , _b , _c , _d , functions } ->
592- schema =
593- Enum . find_value ( functions , fn
594- { { _ , ^ function_call , _ } , _ , _ , _ , % { spark_opts: spark_opts } } ->
595- Enum . find_value ( spark_opts , fn { index , schema } ->
596- if index == arg_index do
597- schema
598- end
599- end )
590+ if ( function_call == :use and arg_index > 0 ) && Code . ensure_loaded? ( module ) &&
591+ function_exported? ( module , :opt_schema , 0 ) do
592+ schema = module . opt_schema ( )
593+ { :override , Enum . uniq ( autocomplete_schema ( schema , hint , info . value_type_path , opts ) ) }
594+ else
595+ case Code . fetch_docs ( module ) do
596+ { :docs_v1 , _a , :elixir , _b , _c , _d , functions } ->
597+ schema =
598+ Enum . find_value ( functions , fn
599+ { { _ , ^ function_call , _ } , _ , _ , _ , % { spark_opts: spark_opts } } ->
600+ Enum . find_value ( spark_opts , fn { index , schema } ->
601+ if index == arg_index do
602+ schema
603+ end
604+ end )
605+
606+ _ ->
607+ nil
608+ end )
600609
601- _ ->
602- nil
603- end )
610+ if schema do
611+ { :override , Enum . uniq ( autocomplete_schema ( schema , hint , info . value_type_path , opts ) ) }
612+ else
613+ :ignore
614+ end
604615
605- if schema do
606- { :override , Enum . uniq ( autocomplete_schema ( schema , hint , info . value_type_path , opts ) ) }
607- else
616+ _ ->
608617 :ignore
609- end
610-
611- _ ->
612- :ignore
618+ end
613619 end
614620 end
615621
0 commit comments