
    ue                         d dl Z d dlZd dlZd dlZd dlZ	 d dlZddlm	Z	 ddl
mZmZmZmZ dj                   ej                          j"                        Zd Zd Zd Zdd	Zed
k(  r e        yy# e$ r d dlZY bw xY w)    N   )__version__)PythonLSPServerstart_io_lang_serverstart_tcp_lang_serverstart_ws_lang_serverz8%(asctime)s {0} - %(levelname)s - %(name)s - %(message)sc                    d| _         | j                  ddd       | j                  ddd       | j                  dd	d
       | j                  dt        dd       | j                  ddd       | j                         }|j                  dd       |j                  dd       | j                  ddddd       | j                  dddd t        z   !       y )"NzPython Language Serverz--tcp
store_truezUse TCP server instead of stdio)actionhelpz--wsz'Use Web Sockets server instead of stdioz--hostz	127.0.0.1zBind to this address)defaultr   z--porti'  zBind to this port)typer   r   z--check-parent-processzCheck whether parent process is still alive using os.kill(ppid, 0) and auto shut down language server process when parent process is not alive.Note that this may not work on a Windows machine.z--log-configz5Path to a JSON file containing Python logging config.)r   z
--log-filezeRedirect logs to the given file instead of writing to stderr.Has no effect if used with --log-config.z-vz	--verbosecountr   z;Increase verbosity of log output, overrides log config file)r   r   r   z-Vz	--versionversionz
%(prog)s v)r   r   )descriptionadd_argumentintadd_mutually_exclusive_groupr   )parser	log_groups     0/usr/lib/python3/dist-packages/pylsp/__main__.pyadd_argumentsr      s   1F
+L   |*S   +<RS
sD?RS
 <   335IT   3   J   k)\K5O      c                     t        j                         } t        |        | j                         }t	        |j
                  |j                  |j                         |j                  r1t        |j                  |j                  |j                  t               y |j                  r&t        |j                  |j                  t               y t!               \  }}t#        |||j                  t               y )N)argparseArgumentParserr   
parse_args_configure_loggerverbose
log_configlog_filetcpr   hostportcheck_parent_processr   wsr   _binary_stdior   )r   argsstdinstdouts       r   mainr+   F   s    $$&F&DdllDOOT]]CxxIItyy$";";_	
 
TYY(A(A?S%vUFD,E,EWr   c                  r    t         j                  j                  t         j                  j                  }} | |fS )zConstruct binary stdio streams (not text mode).

    This seems to be different for Window/Unix Python2/3, so going by:
        https://stackoverflow.com/questions/2850893/reading-binary-data-from-stdin
    )sysr)   bufferr*   )r)   r*   s     r   r'   r'   W   s+     II$$cjj&7&76E&=r   c                 f   t         j                  }|rJt        |dd      5 }t         j                  j	                  t        j                  |             d d d        nwt        j                  t              }|r&t         j                  j                  |dddd d      }nt        j                         }|j                  |       |j                  |       | dk(  rt         j                  }n+| d	k(  rt         j                  }n| d
k\  rt         j                   }|j#                         y # 1 sw Y   \xY w)Nrzutf-8)encodingai   
   r   )modemaxBytesbackupCountr1   delayr      )loggingrootopenconfig
dictConfigjsonload	Formatter
LOG_FORMAThandlersRotatingFileHandlerStreamHandlersetFormatter
addHandlerWARNINGINFODEBUGsetLevel)r   r    r!   root_loggerf	formatterlog_handlerlevels           r   r   r   a   s    ,,K*cG4 	4NN%%diil3	4 	4 %%j1	!**>>) ? K "//1K  +{+!|	A	A3	4 	4s   3D''D0__main__)r   NN)r   r9   logging.configr-   timeujsonr>   	Exception_versionr   
python_lspr   r   r   r   format	localtimetm_zonerA   r   r+   r'   r   __name__ r   r   <module>r\      s       
  "  HNNDNN

'TX" @ zF k  s   A1 1	A=<A=