示例#1
0
文件: __main__.py 项目: zmukwa/ycmd
def SetupOptions(options_file):
    options = (json.load(open(options_file, 'r'))
               if options_file else user_options_store.DefaultOptions())
    utils.RemoveIfExists(options_file)
    options['hmac_secret'] = base64.b64decode(options['hmac_secret'])
    user_options_store.SetAll(options)
    return options
    def setUp(self):
        options = dict(user_options_store.DefaultOptions())
        options.update(DEFAULT_CLIENT_OPTIONS)
        user_options_store.SetAll(options)

        self.server_state = YouCompleteMe(user_options_store.GetAll())
        pass
示例#3
0
    def _SetUpServer(self):
        self._available_completers = {}
        self._user_notified_about_crash = False
        self._filetypes_with_keywords_loaded = set()
        self._server_is_ready_with_cache = False
        self._message_poll_request = None

        base.LoadJsonDefaultsIntoVim()
        user_options_store.SetAll(base.BuildServerConf())
        self._user_options = user_options_store.GetAll()
        self._omnicomp = OmniCompleter(self._user_options)
        self._buffers = BufferDict(self._user_options)

        self._SetLogLevel()

        hmac_secret = os.urandom(HMAC_SECRET_LENGTH)
        options_dict = dict(self._user_options)
        options_dict['hmac_secret'] = utils.ToUnicode(
            base64.b64encode(hmac_secret))
        options_dict['server_keep_logfiles'] = self._user_options[
            'keep_logfiles']

        # The temp options file is deleted by ycmd during startup.
        with NamedTemporaryFile(delete=False, mode='w+') as options_file:
            json.dump(options_dict, options_file)

        server_port = utils.GetUnusedLocalhostPort()

        BaseRequest.server_location = 'http://127.0.0.1:' + str(server_port)
        BaseRequest.hmac_secret = hmac_secret

        this_file_path = os.path.dirname(os.path.realpath(__file__))
        tabnine_binary_path = os.path.join(this_file_path, '../../binaries/')

        args = [
            '--client=vim', '--port={0}'.format(server_port),
            '--options_file={0}'.format(options_file.name),
            '--log={0}'.format(self._user_options['log_level']),
            '--idle_suicide_seconds={0}'.format(SERVER_IDLE_SUICIDE_SECONDS)
        ]

        self._server_stdout = utils.CreateLogfile(
            SERVER_LOGFILE_FORMAT.format(port=server_port, std='stdout'))
        self._server_stderr = utils.CreateLogfile(
            SERVER_LOGFILE_FORMAT.format(port=server_port, std='stderr'))
        args.append('--stdout={0}'.format(self._server_stdout))
        args.append('--stderr={0}'.format(self._server_stderr))

        if self._user_options['keep_logfiles']:
            args.append('--keep_logfiles')

        try:
            self._server_popen = start_tabnine_proc(
                cmd_args=args, binary_dir=tabnine_binary_path)
        except RuntimeError as error:
            error_message = str(error)
            self._logger.exception(error_message)
            vimsupport.PostVimMessage(error_message)
            return
示例#4
0
文件: handlers.py 项目: symbolix/ycmd
def UpdateUserOptions( options ):
  global SERVER_STATE

  if not options:
    return

  user_options_store.SetAll( options )
  SERVER_STATE = server_state.ServerState( options )
示例#5
0
文件: handlers.py 项目: zmukwa/ycmd
def UpdateUserOptions( options ):
  global _server_state

  if not options:
    return

  user_options_store.SetAll( options )
  _server_state = server_state.ServerState( options )
示例#6
0
def SetupOptions(options_file):
    options = user_options_store.DefaultOptions()
    if options_file is not None:
        user_options = json.loads(ReadFile(options_file))
        options.update(user_options)
        utils.RemoveIfExists(options_file)
    user_options_store.SetAll(options)
    return options
示例#7
0
def SetupOptions( options_file ):
  options = user_options_store.DefaultOptions()
  user_options = json.loads( ReadFile( options_file ) )
  options.update( user_options )
  utils.RemoveIfExists( options_file )
  hmac_secret = ToBytes( base64.b64decode( options[ 'hmac_secret' ] ) )
  del options[ 'hmac_secret' ]
  user_options_store.SetAll( options )
  return options, hmac_secret
示例#8
0
def IsolatedApp(custom_options={}):
    old_server_state = handlers._server_state
    old_extra_conf_store_state = extra_conf_store.Get()
    old_options = user_options_store.GetAll()
    try:
        yield SetUpApp(custom_options)
    finally:
        handlers._server_state = old_server_state
        extra_conf_store.Set(old_extra_conf_store_state)
        user_options_store.SetAll(old_options)
示例#9
0
def UpdateUserOptions( options ):
  global _server_state

  if not options:
    return

  # This should never be passed in, but let's try to remove it just in case.
  options.pop( 'hmac_secret', None )
  user_options_store.SetAll( options )
  _server_state = server_state.ServerState( options )
示例#10
0
def SetUpYCM():
    from ycm import base
    from ycmd import user_options_store
    from ycm.youcompleteme import YouCompleteMe

    base.LoadJsonDefaultsIntoVim()

    user_options_store.SetAll(base.BuildServerConf())

    return YouCompleteMe(user_options_store.GetAll())
示例#11
0
def SetupOptions(options_file):
    options = user_options_store.DefaultOptions()
    if options_file:
        user_options = json.load(open(options_file, 'r'))
        options.update(user_options)
    utils.RemoveIfExists(options_file)
    hmac_secret = base64.b64decode(options['hmac_secret'])
    del options['hmac_secret']
    user_options_store.SetAll(options)
    return options, hmac_secret
示例#12
0
def IsolatedApp( custom_options = {} ):
  old_server_state = handlers._server_state
  old_extra_conf_store_state = extra_conf_store.Get()
  old_options = user_options_store.GetAll()
  try:
    with IgnoreExtraConfOutsideTestsFolder():
      yield SetUpApp( custom_options )
  finally:
    handlers._server_state = old_server_state
    extra_conf_store.Set( old_extra_conf_store_state )
    user_options_store.SetAll( old_options )
示例#13
0
def SetUpYCM():
    from ycm import base, paths
    from ycmd import user_options_store, utils
    from ycm.youcompleteme import YouCompleteMe

    base.LoadJsonDefaultsIntoVim()

    user_options_store.SetAll(base.BuildServerConf())

    popen_args = [
        paths.PathToPythonInterpreter(),
        paths.PathToCheckCoreVersion()
    ]

    if utils.SafePopen(popen_args).wait() == 2:
        raise RuntimeError('YCM support libs too old, PLEASE RECOMPILE.')

    return YouCompleteMe(user_options_store.GetAll())
示例#14
0
 def setUp(self):
     with patch('vim.eval', side_effect=self.VimEval):
         user_options_store.SetAll(base.BuildServerConf())
         self.ycm = YouCompleteMe(user_options_store.GetAll())
示例#15
0
文件: __main__.py 项目: winkar/ycmd
def Main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--host',
                        type=str,
                        default='localhost',
                        help='server hostname')
    # Default of 0 will make the OS pick a free port for us
    parser.add_argument('--port', type=int, default=0, help='server port')
    parser.add_argument('--log',
                        type=str,
                        default='info',
                        help='log level, one of '
                        '[debug|info|warning|error|critical]')
    parser.add_argument('--idle_suicide_seconds',
                        type=int,
                        default=0,
                        help='num idle seconds before server shuts down')
    parser.add_argument('--options_file',
                        type=str,
                        default='',
                        help='file with user options, in JSON format')
    parser.add_argument('--stdout',
                        type=str,
                        default=None,
                        help='optional file to use for stdout')
    parser.add_argument('--stderr',
                        type=str,
                        default=None,
                        help='optional file to use for stderr')
    parser.add_argument('--keep_logfiles',
                        action='store_true',
                        default=None,
                        help='retain logfiles after the server exits')
    args = parser.parse_args()

    if args.stdout is not None:
        sys.stdout = open(args.stdout, "w")
    if args.stderr is not None:
        sys.stderr = open(args.stderr, "w")

    numeric_level = getattr(logging, args.log.upper(), None)
    if not isinstance(numeric_level, int):
        raise ValueError('Invalid log level: %s' % args.log)

    # Has to be called before any call to logging.getLogger()
    logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s',
                        level=numeric_level)

    options = (json.load(open(args.options_file, 'r'))
               if args.options_file else user_options_store.DefaultOptions())
    utils.RemoveIfExists(args.options_file)
    options['hmac_secret'] = base64.b64decode(options['hmac_secret'])
    user_options_store.SetAll(options)

    # This ensures that ycm_core is not loaded before extra conf
    # preload was run.
    YcmCoreSanityCheck()
    extra_conf_store.CallGlobalExtraConfYcmCorePreloadIfExists()

    # If not on windows, detach from controlling terminal to prevent
    # SIGINT from killing us.
    if not utils.OnWindows():
        try:
            os.setsid()
        # setsid() can fail if the user started ycmd directly from a shell.
        except OSError:
            pass

    # This can't be a top-level import because it transitively imports
    # ycm_core which we want to be imported ONLY after extra conf
    # preload has executed.
    from ycmd import handlers
    handlers.UpdateUserOptions(options)
    SetUpSignalHandler(args.stdout, args.stderr, args.keep_logfiles)
    handlers.app.install(WatchdogPlugin(args.idle_suicide_seconds))
    handlers.app.install(HmacPlugin(options['hmac_secret']))
    waitress.serve(handlers.app, host=args.host, port=args.port, threads=30)
示例#16
0
    def _SetUpServer(self):
        self._available_completers = {}
        self._user_notified_about_crash = False
        self._filetypes_with_keywords_loaded = set()
        self._server_is_ready_with_cache = False
        self._message_poll_request = None

        base.LoadJsonDefaultsIntoVim()
        user_options_store.SetAll(base.BuildServerConf())
        self._user_options = user_options_store.GetAll()
        self._omnicomp = OmniCompleter(self._user_options)
        self._buffers = BufferDict(self._user_options)

        self._SetLogLevel()

        hmac_secret = os.urandom(HMAC_SECRET_LENGTH)
        options_dict = dict(self._user_options)
        options_dict['hmac_secret'] = utils.ToUnicode(
            base64.b64encode(hmac_secret))
        options_dict['server_keep_logfiles'] = self._user_options[
            'keep_logfiles']

        # The temp options file is deleted by ycmd during startup.
        with NamedTemporaryFile(delete=False, mode='w+') as options_file:
            json.dump(options_dict, options_file)

        server_port = utils.GetUnusedLocalhostPort()

        BaseRequest.server_location = 'http://127.0.0.1:' + str(server_port)
        BaseRequest.hmac_secret = hmac_secret

        try:
            python_interpreter = paths.PathToPythonInterpreter()
        except RuntimeError as error:
            error_message = ("Unable to start the ycmd server. {0}. "
                             "Correct the error then restart the server "
                             "with ':YcmRestartServer'.".format(
                                 str(error).rstrip('.')))
            self._logger.exception(error_message)
            vimsupport.PostVimMessage(error_message)
            return

        args = [
            python_interpreter,
            paths.PathToServerScript(), '--port={0}'.format(server_port),
            '--options_file={0}'.format(options_file.name),
            '--log={0}'.format(self._user_options['log_level']),
            '--idle_suicide_seconds={0}'.format(SERVER_IDLE_SUICIDE_SECONDS)
        ]

        self._server_stdout = utils.CreateLogfile(
            SERVER_LOGFILE_FORMAT.format(port=server_port, std='stdout'))
        self._server_stderr = utils.CreateLogfile(
            SERVER_LOGFILE_FORMAT.format(port=server_port, std='stderr'))
        args.append('--stdout={0}'.format(self._server_stdout))
        args.append('--stderr={0}'.format(self._server_stderr))

        if self._user_options['keep_logfiles']:
            args.append('--keep_logfiles')

        self._server_popen = utils.SafePopen(args,
                                             stdin_windows=PIPE,
                                             stdout=PIPE,
                                             stderr=PIPE)
示例#17
0
def _SetupOptions(user_options):
    options = user_options_store.DefaultOptions()
    options.update(user_options)
    user_options_store.SetAll(options)
    return options