
    G@d                     P   d Z ddlZddlZddlZddlmZ ddlZddlm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ ddlmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z& ddl'm(Z( d)                    e(          Z* ej+        e,          Z- G d de          Z.dS )zR
Manager for all LSP clients connected to the servers defined
in our Preferences.
    N)SignalSlotQTimer)QMessageBox)on_conf_change)InstallerPylspError)_get_conf_pathrunning_under_pytestrunning_in_mac_app)PYTHON_CONFIG)check_connection_port)SUPPORTED_LANGUAGESSpyderCompletionProviderWorkspaceUpdateKind)	LSPClient)TABS)ClientStatusLSPStatusWidgetServerDisabledMessageBox)PREFERRED_MODULESz, c                      e Zd ZdZdZdZdZddddd	d
defddddddddddddddddddddd d!gZd"Z	e
Zd#Zd$Zd%d&gZd'Zd(Zd)Z ee          Z	 d* Zd+ Zd`d-efd.Zd/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Z d7 Z!d8 Z"d9 Z# e$            d:             Z% e$e          d;             Z&d< Z' e$e          d=             Z(d> Z)d? Z*d@ Z+dA Z, e$e-e-          dB             Z. e$            dC             Z/dDed-efdEZ0e1dF             Z2 e1dGdHdIgJ          dK             Z3 e1dLdMJ          dN             Z4 e1dOdPJ          dQ             Z5 e1dRdSdTgJ          dU             Z6d`dVZ7dW Z8dX Z9dY Z:dZ Z;d[ Z<d\ Z=d] Z>d^ Z?d_S )aLanguageServerProviderz!Language Server Protocol manager.lsp   T)enable_hover_hintsT)show_lsp_down_warningT)code_completionT)jedi_definitionT)jedi_definition/follow_importsT)jedi_signature_helpTpreload_modules)pyflakesT)mccabeF)
formattingautopep8)format_on_saveF)pycodestyleF)pycodestyle/filename )pycodestyle/excluder*   )pycodestyle/selectr*   )pycodestyle/ignorer*   )pycodestyle/max_line_lengthO   )
pydocstyleF)pydocstyle/conventionnumpy)pydocstyle/selectr*   )pydocstyle/ignorer*   )pydocstyle/matchz(?!test_).*\.py)pydocstyle/match_dirz[^\.].*)zadvanced/enabledF)advanced/modulepylsp)advanced/host	127.0.0.1)advanced/port'  )advanced/externalF)advanced/stdioFz0.2.0stoppedrunningr:   	localhost   i'  i  c                    t          j        | ||           i | _        i | _        i | _        i | _        i | _        i | _        t          i           | _	        i | _
        |                                  d| _        d | _        | j        g| _        d S )NT)r   __init__clientsclients_restart_countclients_restart_timersclients_restartingclients_hearbeatclients_statusbarsetrequestsregister_queueupdate_lsp_configurationshow_no_external_server_warningcurrent_project_pathcreate_statusbarSTATUS_BAR_CLASSES)selfparentconfigs      [lib/python3.11/site-packages/spyder/plugins/completion/providers/languageserver/provider.pyrD   zLanguageServerProvider.__init__}   s     )$???%'"&(#"$ "!#B %%'''/3,$(! !#
    c                     | j         D ]t}	 | j         |         G| j         |                                          | j         |                             d           | j         |= X# t          t          t
          f$ r Y qw xY wdS )zStop all heartbeatsN)rI   stop	setParent	TypeErrorKeyErrorRuntimeErrorrS   languages     rV   __del__zLanguageServerProvider.__del__   s    - 	 	H(2>)(388:::)(3==dCCC-h7x6   	 	s   AA  A:9A:Fr_   c                    | j         |                     |          dd}|ret                              d                    |                     |                     |t          j                   |                     ||           dS | j	        |         r| j
        | j        |         z
  dz   }t                              d                    ||                     |                     |t          j                   | j        |xx         dz  cc<   |                     ||           | j        |         }| j        |         dk    r t                              d           d| j	        |<   | j        |                                          d| j        |<   	 | j        |                                          | j        |                             d           | j        |= |d	                                          |d	                                          n# t$          t&          t(          f$ r Y nw xY w|                     |           dS dS dS )
z#Restart language server on failure.NstatusrU   instancezManual restart for {}...r   z&Automatic restart attempt {} for {}...r   zRestart failed!Frd   )STOPPEDget_language_configloggerinfoformatupdate_statusr   
RESTARTINGrestart_clientrH   MAX_RESTART_ATTEMPTSrF   rE   rG   rY   rI   rZ   
disconnectr[   r\   r]   report_lsp_down)rS   r_   forceclient_configattemptclients         rV   restart_lspz"LanguageServerProvider.restart_lsp   sh    l..x88
 
  	/KK299(CCDDDx)@AAA-88888$X. 	/03H=>@ABGKK@GG# # $ $ $x)@AAA&x000A5000-888\(+F )(3q88-...49'1+H5::<<<8<+H5)(388:::)(3==dCCC-h7:&11333:&++----!8\:   D$$X.....3	/ 	/ 98s   A;H H('H(c                 "    t          ||           S N)r   )rS   rT   s     rV   rQ   z'LanguageServerProvider.create_statusbar   s    vt,,,rW   c                 p   |d         }|d         }d}|j         r|                                }|| j        k    r{|r{t                              d           d| j        |<   | j        |                                          d| j        |<   d| j        |<   | 	                    |t          j                   dS dS dS )ze
        Check if a server restart was successful in order to stop
        further attempts.
        rc   rd   TzRestart successful!FNr   )	stdio_pidis_stdio_aliveRUNNINGrg   rh   rH   rG   rY   rF   rj   r   READY)rS   rs   r_   rc   rd   checks         rV   check_restartz$LanguageServerProvider.check_restart   s    
 !*%  	.++--ET\!!e!KK-...05D#H-'16688848D'134D&x0x);<<<<< "!!!rW   c                    t                      rt          | dd          sdS | j        |         }|d         }|                    dd          }|;|                                s|| j        k    r|j                            |           dS dS dS )zJ
        Check if client or server for a given language are down.
        rE   Nrc   rd   )r   getattrrE   getis_downrz   sig_went_downemit)rS   r_   rs   rc   rd   s        rV   check_heartbeatz&LanguageServerProvider.check_heartbeat   s    
  !! 	4D11 h'!::j$//!! 6Vt|%;%;&++H55555  %;%;rW   c                 l    || j         |<   | j                            t          j        d||fi            dS )z5
        Update status for the current file.
        rj   N)rJ   sig_call_statusbarr   r   ID)rS   r_   rc   s      rV   rj   z$LanguageServerProvider.update_status   sL     ,2x($$(F1CR	I 	I 	I 	I 	IrW   c                     | j                             |d          s |                     |t          j                   | j                             |          r%| j        |         }|                     ||           dS dS )zG
        Update the status bar widget on client initilization.
        FN)rH   r   rj   r   r{   rE   r}   )rS   optionsr_   rs   s       rV   on_initializez$LanguageServerProvider.on_initialize   s    
 &**8U;; 	=x);<<< "&&x00 	1\(+Fvx00000	1 	1rW   c                     t                      j                            d          sJt                      s=	  j                                                   j                                     d            j        = n# t          $ r Y nw xY wt          	                    d
                                         t                     }|                    d           |                     j                   |j                             fd                                t$          j                   d j        <    j         j        <   | j        <   |                                 dS dS dS )zG
        Handle automatic restart of client/server on failure.
        FNzAutomatic restart for {}...c                  .                                    S rv   )rt   )r_   rS   s   rV   <lambda>z8LanguageServerProvider.handle_lsp_down.<locals>.<lambda>  s    $*:*:8*D*D rW   T)r   rH   r   r   rI   rY   rZ   r\   rg   rh   ri   r   setSingleShotsetIntervalTIME_BETWEEN_RESTARTStimeoutconnectrj   r   rk   rm   rF   rG   start)rS   r_   timers   `` rV   handle_lsp_downz&LanguageServerProvider.handle_lsp_down  s    	H%%%'++He<< 	,..	%h/44666%h/99$???)(33   KK5<<XFFGGG4LLE&&&d8999M!!"D"D"D"D"DEEEx)@AAA04D#H-373LD&x049D'1KKMMMMM'	 	 	 	s   AB 
BBc                      t          d          S )NzLanguage Server Protocol (LSP))r	   rS   s    rV   get_namezLanguageServerProvider.get_name  s    1222rW   c                     || j         v rQ| j         |         d         }|$| j        |                             ||f           d S |                    ||           d S d S )Nrd   )rE   rM   appendregister_file)rS   r_   filename
codeeditorlanguage_clients        rV   r   z$LanguageServerProvider.register_file   sq    t|##"l84Z@O&#H-44h
5KLLLLL--h
CCCCC $#rW   c                 t    dg}| j         }|D ]*}|d t          D             v r|                    |           +|S )zd
        Get the list of languages we need to start servers and create
        clients for.
        pythonc                 6    g | ]}|                                 S  )lower).0ls     rV   
<listcomp>z8LanguageServerProvider.get_languages.<locals>.<listcomp>0  s     AAA!''))AAArW   )rU   r   r   )rS   	languagesall_optionsoptions       rV   get_languagesz$LanguageServerProvider.get_languages(  sW    
 J	k! 	) 	)FAA-@AAAAA  (((rW   c                 `    |dk    r|                                  S |                     |          S )z:Get language configuration options from our config system.r   )generate_python_configget_confr^   s     rV   rf   z*LanguageServerProvider.get_language_config4  s1    x..000==***rW   c                     | j         }|sJt          j        t                      dd          }t          j        |          st          j        |           |S )z
        Get root path to pass to the LSP servers.

        This can be the current project path or the output of
        getcwd_or_home (except for Python, see below).
        	lsp_paths	root_path)rP   ospjoinr
   existsosmakedirs)rS   r_   paths      rV   get_root_pathz$LanguageServerProvider.get_root_path;  sT     ( 		" 8MOO[+FFD:d## "D!!!rW   c                    |t           j        k    r|| _        | j        D ]}| j        |         }|d         | j        k    r|d         }|j        r!|j        r|                    |||d           Pt          	                    d
                    |j                             |                     |          }||_        | j                            |           |                     |           |                     |           dS )a  
        Send a didChangeWorkspaceFolders request to each LSP server
        when the project path changes so they can update their
        respective root paths.

        If the server doesn't support workspace updates, restart the
        client with the new root path.
        rc   rd   )folderrd   kindzA{0}: LSP does not support multiple workspaces, restarting client!N)r   ADDITIONrP   rE   rz   support_multiple_workspacessupport_workspace_updatesend_workspace_folders_changerg   debugri   r_   r   r   sig_stop_completionsr   %stop_completion_services_for_language&start_completion_services_for_language)rS   project_pathupdate_kindprojectsr_   r   rd   r   s           rV   project_path_updatez*LanguageServerProvider.project_path_updateQ  s3    -666(4D% 	J 	JH"l84Ox(DL88*:68 J 9J::".$, +< <     LL--3VH4E-F-F   "//99F&,HO-228<<<>>xHHH??III)	J 	JrW   c                 ^    t          |dd          }| j                            |           dS )z0Report server errors in our error report dialog.Tz%Internal Python Language Server error)textis_tracebacktitleN)dictsig_exception_occurredr   )rS   error
error_datas      rV   report_server_errorz*LanguageServerProvider.report_server_erroru  s@     9
 
 


 	#((44444rW   c                     t           j        dk    rd}nd}t          d                              |||                                          |z   fd}| j                            |           d| _        dS )	za
        Report that connection couldn't be established with
        an external server.
        ntz<br><br>To fix this, please verify that your firewall or antivirus allows Python processes to open ports in your system, or the settings you introduced in our Preferences to connect to external LSP servers.zu<br><br>To fix this, please verify the settings you introduced in our Preferences to connect to external LSP servers.zIt appears there is no {language} language server listening at address:<br><br><tt>{host}:{port}</tt><br><br>Therefore, completion and linting for {language} will not work during this session.)hostportr_   c                 J    t          j        | t          d                    S )NWarning)r   warningr	   )rT   warn_strs    rV   wrap_message_boxzJLanguageServerProvider.report_no_external_server.<locals>.wrap_message_box  s    &vq||XFFFrW   FN)r   namer	   ri   
capitalizesig_show_widgetr   rO   )rS   r   r   r_   
os_messager   r   s         @rV   report_no_external_serverz0LanguageServerProvider.report_no_external_server  s    
 7d??( JF   * + + ,26x/B/B/D/D ,2 ,F ,F 		G 	G 	G 	G 	G 	!!"2333/4,,,rW   c                    |                      |t          j                   |                     d          sdS t          j        dk    rd}nd}t          d                              |                                          |z   t          d          z   }t          j
        || j                  }| j                            |           dS )	z\
        Report that either the transport layer or the LSP server are
        down.
        r   Nr   zTo try to fix this, please verify that your firewall or antivirus allows Python processes to open ports in your system, or restart Spyder.<br><br>z2This problem could be fixed by restarting Spyder. zCompletion and linting in the editor for {language} files will not work during the current session, or stopped working.<br><br>)r_   z"Do you want to restart Spyder now?)rj   r   DOWNr   r   r   r	   ri   r   r   rd   set_confr   r   )rS   r_   r   r   wrappers        rV   ro   z&LanguageServerProvider.report_lsp_down  s     	8\%6777}}455 	F7d??5 J E 
     &(*=*=*?*?&@@ 233	4 	 +3HdmLL!!'*****rW   c                 J   d}|| j         v r| j         |         }| j        |         }t                      r!t          j                            d          s|S |d         | j        k    }|| j        vryt          |           }|| j        |<   |	                    | j
                   |j                            t          j        | j        |                     |                                 |d         | j        k    r(|d         }|d         rb|d         }|d         }t%          ||          }	|	s@| j        r|                     |||           |                     |t,          j                   dS t1          | ||                     |          |          |d	<   |                     |d	                    t6                              d
                    |                     |d	                                          | j        |d<   d}|D ]}
 |d	         j        |
  g | j        |<   |S )z)Start an LSP client for a given language.FSPY_TEST_USE_INTROSPECTIONrc   rU   externalr   r   )rT   server_settingsr   r_   rd   zStarting LSP client for {}...T)rE   rM   r   r   environr   rz   rI   r   r   TIME_HEARTBEATr   r   	functoolspartialr   r   re   r   rO   r   rj   r   r   r   r   register_client_instancerg   rh   ri   r   )rS   r_   startedr   queuer   rU   r   r   responseentrys              rV   r   z=LanguageServerProvider.start_completion_services_for_language  sY    t|##"l84O'1E $%% #z~~&BCC #"N%h/4<?Gt444 t27%h/!!$"5666%%i&7(('4 '4 5 5 5x(DL88(2
 *% 	%!&>D!&>D4T4@@H# %? 6 :: $dH6 6 6**8\5FGGG$u.7$*--h77%	/ / /
+ --oj.IJJJ ;BB8LLMMM
+11333,0L)" F FE=OJ/=uEEE02#H-rW   c                     |j                             | j                   |j                            | j                   |j                            | j                   |j                            | j                   dS )z.Register signals emitted by a client instance.N)r   r   r   sig_initializer   sig_server_errorr   "sig_language_completions_available)rS   rd   s     rV   r   z/LanguageServerProvider.register_client_instance  s{    &&t';<<<''(:;;;!))$*BCCC''3	5 	5 	5 	5 	5rW   c                 D    | j                             | j                   d S rv   )sig_provider_readyr   COMPLETION_PROVIDER_NAMEr   s    rV   r   zLanguageServerProvider.start  s"    $$T%BCCCCCrW   c                 x    t                               d           | j        D ]}|                     |           d S )NzShutting down LSP manager...)rg   rh   rE   r   r^   s     rV   shutdownzLanguageServerProvider.shutdown  sK    2333 	A 	AH66x@@@@	A 	ArW   c                     d}||k    rd}|r2t                               d           |                     d           dS dS )z
        Update server configuration after a change in Spyder's Python
        path.

        `path_dict` corresponds to the previous state of the Python path.
        `new_path_dict` corresponds to the new state of the Python path.
        TFzUpdate server's sys.pathpython_onlyN)rg   r   rN   )rS   	path_dictnew_path_dictupdates       rV   python_path_updatez)LanguageServerProvider.python_path_update  s[     %%F 	<LL3444))d);;;;;	< 	<rW   c                 2    |                      d           d S )NTr   )rN   r   s    rV   main_interpreter_changedz/LanguageServerProvider.main_interpreter_changed,  s    %%$%77777rW   r   c                 V    | j                             t          j        d|fi            d S )Nset_current_language)r   r   r   r   )rS   r   r_   s      rV   file_opened_closed_or_updatedz4LanguageServerProvider.file_opened_closed_or_updated0  s;    $$ 6R	I 	I 	I 	I 	IrW   c                     || _         t                      r!t          j                            d          sd S |                                  d S Nr   )rU   r   r   r   r   rN   )rS   rU   s     rV   update_configurationz+LanguageServerProvider.update_configuration4  sK    !! 	:>>">?? %%'''''rW   outline_explorergroup_cellsshow_comments)sectionr   c                     t                      r!t          j                            d          sd S |                                  d S r  r   r   r   r   rN   rS   r   values      rV   #on_pyls_spyder_configuration_changez:LanguageServerProvider.on_pyls_spyder_configuration_change<  F      !! 	:>>">?? %%'''''rW   completionsenable_code_snippetsc                     t                      r!t          j                            d          sd S |                                  d S r  r  rS   r  s     rV   !on_code_snippets_enabled_disabledz8LanguageServerProvider.on_code_snippets_enabled_disabledD  sD    !! 	:>>">?? %%'''''rW   pythonpath_managerspyder_pythonpathc                     t                      r7t          j                            d          r|                     d           d S d S d S )Nr   Tr   r  r  s     rV   on_pythonpath_option_updatez2LanguageServerProvider.on_pythonpath_option_updateK  s\     !""	<
;<<	< ))d);;;;;		< 	< 	< 	<rW   main_interpreterdefaultcustom_interpreterc                     t                      r!t          j                            d          sd S |                                  d S r  r  r  s      rV   on_main_interpreter_changez1LanguageServerProvider.on_main_interpreter_changeT  r  rW   c                 4   |                                  D ]}|r|dk    r| j        |                     |          dd}|| j        vr|| j        |<   g | j        |<   H| j        |         d         |d         g d}t          fd|D                       }|rt                              d                    |                     | j        |         d         | j        k    r3d	         rd	         s| 	                    ||           || j        |<   | j        |         d         | j
        k    r| 	                    ||           5| j        |         d         | j
        k    r.| j        |         d
         }|                    d                    dS )z
        Update server configuration after changes done by the user
        through Spyder's Preferences.

        python_only: bool
            Perform an update only for the Python language server.
        r   Nrb   rU   )cmdargsr   r   r   stdioc                 4    g | ]}|         |         k    S r   r   )r   xcurrent_lang_confignew_lang_configs     rV   r   zCLanguageServerProvider.update_lsp_configuration.<locals>.<listcomp>s  s8     6 6 6#$  3159KK 6 6 6rW   zRestart required for {} client!rc   r   rd   configurations)r   re   rf   rE   rM   anyrg   r   ri   rl   rz   send_configurations)	rS   r   r_   rq   restart_diffrestartrs   r%  r&  s	          @@rV   rN   z/LanguageServerProvider.update_lsp_configuration\  s    **,, "	? "	?H x833'+|'+'?'?'I'I)-/ /M t|++)6X&02#H--&*l8&<X&F#"/"9 =  =  = 6 6 6 6 6(46 6 6 7 7 ?LL!B!I!I "" "" # # #|H-h74<GG 0
; C$3J$?C //-HHHH5BDL22h/9T\II++HmDDD|H-h74<GG!%h!7
!C22+,<=? ? ?C"	? "	?rW   c                     | j                             |           |                     |           || j        |<   |                     |           dS )zRestart a client.N)r   r   r   rE   r   )rS   r_   rU   s      rV   rl   z%LanguageServerProvider.restart_client  sS    !&&x000228<<<!'X33H=====rW   c                 L    | j         D ]}||vr|                     |           d S rv   )rE   r   )rS   
active_setr_   s      rV   update_client_statusz+LanguageServerProvider.update_client_status  sA     	E 	EHz))::8DDD	E 	ErW   c                 n   || j         v r*| j         |         }|d         | j        k    rt                              d                    |                     	 |d                                          n# t          $ r Y nw xY w	 | j        |         G| j        |                                          | j        |         	                    d            | j        |= n# t          t          t          f$ r Y nw xY w|d                                          | j        |d<   | j                            |           d S d S )Nrc   zStopping LSP client for {}...rd   )rE   rz   rg   rh   ri   rn   r[   rI   rY   rZ   r\   r]   re   r   r   )rS   r_   r   s      rV   r   z<LanguageServerProvider.stop_completion_services_for_language  sQ   t|##"l84Ox(DL88;BB8LLMMM#J/::<<<<    D,X6B-h7<<>>>-h7AA$GGG 1(;!8\:   D
+00222(,OH%%**844444# $#s%   A2 2
A?>A?AC C21C2c                     || j         v r=| j                             |           | j                            | j        ||           d S d S rv   )rL   discardsig_response_readyr   r   )rS   response_typer   r_   req_ids        rV   receive_responsez'LanguageServerProvider.receive_response  sa    T]""M!!&)))#((-vxA A A A A #"rW   c                 ^   || j         v r| j         |         }|d         | j        k    rd| j                            |           | j         |         d         }t	          j        | j        ||          |d<   |                    ||           d S | j        	                    | j
        |i            d S )Nrc   rd   )r_   r5  response_callback)rE   rz   rL   addr   r   r6  perform_requestr3  r   r   )rS   r_   requestparamsr5  r   rs   s          rV   send_requestz#LanguageServerProvider.send_request  s    t|##"l84Ox(DL88!!&)))h/
;.7.?)HV/M /M /M*+&&w777$$T%B%+R	1 	1 	1 	1 	1rW   c                     || j         v rI| j         |         }|d         | j        k    r-| j         |         d         }|                    ||           d S d S d S )Nrc   rd   )rE   rz   r:  )rS   r_   r;  r<  r   rs   s         rV   send_notificationz(LanguageServerProvider.send_notification  sh    t|##"l84Ox(DL88h/
;&&w77777	 $#88rW   c                     |                     dd          }|r|                     |||           dS | j        D ]}|                     |||           dS )z7Send notification/request to all available LSP servers.r_   N)popr?  rE   )rS   r;  r<  r_   s       rV   broadcast_notificationz-LanguageServerProvider.broadcast_notification  sv    ::j$// 	B""8Wf===== L B B&&x&AAAAB BrW   c           
      H    t          j                    }|                     dd          }|                     dd          }|                     dd          }|                     dd                              d	          }|                     d
d                              d	          }|                     dd                              d	          }|                     dd                              d	          }|                     dd          }	|                     d          d |D             d |D             d |D             d |D             d|	d}
d|                     d          i}|                     d          }|dk    rW|                     dd                              d	          }|                     dd                              d	          }g }g }nVg }g }|                     dd                              d	          }|                     dd                              d	          }|                     d          |d |D             d |D             d |D             d  |D             |                     d!          |                     d"          d#}|                     d$            d%k    rd&n  g d'} fd(|D             }d)|	i|d%<   |                     d*d+,          }|                     d-d+,          }||d.}t          j                                        }|                    d/d0           |                     d1d2,          rt          j        }n;|                     d3d2,          }t                      r|                    d4d0           ||                     d5d6g 7          |d8}|                     d9          |                     d:d;,          d<}d|                     d=          i}|                     d>          |                     d?          d@}|                     dA          }|                     dB          }||dC<   || j
        v r|sdD|dE<   ndF|dE<   ||dG<   ||dH<   ||dI<   ||dJ<   |dK         d         dL         }|d                             |
           |d                             |           |d                             |           |dM                             |           |dN                             |           |dO                             |           |d=                             |           |d>                             |           |                     dP          |dQ         dR<   |                    |           |S )Szi
        Update Python server configuration with the options saved in our
        config system.
        r7   r8   r9   r:   r;   r<   r+   r*   ,r)   r,   r-   r.   r/   r(   c                 :    g | ]}||                                 S r   strip)r   excludes     rV   r   zALanguageServerProvider.generate_python_config.<locals>.<listcomp>  s%    MMMGWMMMMrW   c                 :    g | ]}||                                 S r   rF  )r   r   s     rV   r   zALanguageServerProvider.generate_python_config.<locals>.<listcomp>  s=     B B B%B)) B B BrW   c                 :    g | ]}||                                 S r   rF  r   selects     rV   r   zALanguageServerProvider.generate_python_config.<locals>.<listcomp>  %    HHH&Hv||~~HHHrW   c                 :    g | ]}||                                 S r   rF  r   ignores     rV   r   zALanguageServerProvider.generate_python_config.<locals>.<listcomp>  rM  rW   F)enabledrH  r   rL  rP  hangClosingmaxLineLengthrQ  r#   r1   Customr4   r3   r0   c                 :    g | ]}||                                 S r   rF  rO  s     rV   r   zALanguageServerProvider.generate_python_config.<locals>.<listcomp>  ;     A A A$A&,,.. A A ArW   c                 :    g | ]}||                                 S r   rF  rK  s     rV   r   zALanguageServerProvider.generate_python_config.<locals>.<listcomp>  rV  rW   c                 :    g | ]}||                                 S r   rF  rO  s     rV   r   zALanguageServerProvider.generate_python_config.<locals>.<listcomp>  rM  rW   c                 :    g | ]}||                                 S r   rF  rK  s     rV   r   zALanguageServerProvider.generate_python_config.<locals>.<listcomp>  rM  rW   r5   r6   )rQ  
convention	addIgnore	addSelectrP  rL  matchmatchDirr%   blackpylsp_black)r&   yapfr`  c                 "    i | ]}|d |k    iS )rQ  r   )r   fmt	formatters     rV   
<dictcomp>zALanguageServerProvider.generate_python_config.<locals>.<dictcomp>  s:     
 
 
  3)+
 
 
rW   line_lengthr  r  )r
  r	  )enable_block_commentsr  
PYTHONPATHNr  r  
executable
PYTHONHOMEr  r  )r
  r  )environmentextra_pathsenv_varsr   r  r  )rQ  include_paramsr!   r   r    )rQ  follow_importsr=   r>   r   z8--host {host} --port {port} --tcp --check-parent-processr!  z--check-parent-processr   r"  r   r   r'  pluginspyls_spyderjedijedi_completionr"   preloadmodules)r   copyr   splitr   r   rA  sysri  r   	LOCALHOSTr   )!rS   python_configr   r   r   
cs_excludecs_filename	cs_select	cs_ignorecs_max_line_lengthr(   r#   rZ  	ds_ignore	ds_selectds_add_ignoreds_add_selectr0   
formattersformatter_optionsr  display_block_commentspyls_spyder_optionsrm  rk  rr  rs  r!   r   external_serverr"  rp  rd  s!                                   @rV   r   z-LanguageServerProvider.generate_python_config  s   
 &*,, mm-w77}}_k::}}_d33 ]]#8"==CCCHH
mm$:B??EEcJJMM"6;;AA#FF	MM"6;;AA#FF	!]]+H"MM }}]33MMzMMMB B)4B B BHHIHHHHHIHHH /	
 	
 t}}Z00

 ]]#:;;
!!&92>>DDSIII&92>>DDSIIIMMMII MM*=rBBHHMMM MM*=rBBHHMMM }}\22$A A(5A A AA A(5A A AHHIHHHHHIHHH]]#566&<==
 

 MM,//	 &/'%9%9MMy	 988

 
 
 
 "	
 
 
 '45G%H'" mm& $ 
 
 "&& "/ "
 "

 &<&
 
 :??$$\4(((==,>=?? 		1 .KK--0B ( D DK "## 1\4000 '==)<1E13 ) 5 5 !
 
 }}%677"mm,B4A , C C
 
 t}}%:;;
 }}%677"mm,LMM
 
 --(;<<.//  #e4>!!%!&>M&!! %=M&!$3j!!&g $f $f   01':9E%%k222
""8,,,$$Z000%%&9:::t$$$!"))/:::%&--.ABBB!"))/:::(,6G(H(H	9%()))rW   N)F)@__name__
__module____qualname____doc__r   DEFAULT_ORDERSLOWPRELOAD_MDOULESCONF_DEFAULTSCONF_VERSIONr   	CONF_TABSre   rz   ry  rm   r   r   r   r   r   rD   r`   strrt   rQ   r}   r   rj   r   r   r   r   r   rf   r   r   r   r   r   ro   r   r   r   r   objectr   r   r  r   r  r  r  r  r  rN   rl   r/  r   r6  r=  r?  rB  r   r   rW   rV   r   r   -   st       ++$MD$'!!0%	O,"!$#""+*!!0,#$&$!=MP LIGGk*I!N $VD\\*
 
 
(	 	 	&/ &/C &/ &/ &/ &/P- - -= = =*6 6 6 I I I1 1 1  63 3 3D D D
 
 
+ + +  , 
TVV J  J V JF 
T#YY5 5 Y5$5 $5 $5L 
T#YY+ + Y+@? ? ?B5 5 5D D DA A A
 
T&&< < <( 
TVV8 8 V8Ic IS I I I I ( ( ^( ^.)?;= = =( (= =( ^M2HIII( ( JI( ^09LMMM< < NM< ^.%';<> > >( (> >(*? *? *? *?X> > >E E E
5 5 5(A A A1 1 18 8 8B B Bb b b b brW   r   )/r  r   loggingr   os.pathr   r   rx  qtpy.QtCorer   r   r   qtpy.QtWidgetsr   spyder.api.config.decoratorsr   spyder.utils.installersr   spyder.config.baser	   r
   r   r   spyder.config.lspr   spyder.utils.miscr   spyder.plugins.completion.apir   r   r   9spyder.plugins.completion.providers.languageserver.clientr   ;spyder.plugins.completion.providers.languageserver.conftabsr   :spyder.plugins.completion.providers.languageserver.widgetsr   r   r   ,spyder.utils.introspection.module_completionr   r   r  	getLoggerr  rg   r   r   rW   rV   <module>r     s         				       



 - , , , , , , , , , & & & & & & 8 7 7 7 7 7 7 7 7 7 7 74 4 4 4 4 4 4 4 4 4 4 4 + + + + + + 3 3 3 3 3 3@ @ @ @ @ @ @ @ @ @ P O O O O O L L L L L L= = = = = = = = = = J J J J J J ))-..		8	$	$@ @ @ @ @5 @ @ @ @ @rW   