function getSessionHints(query, cursor, type, token, $deferredHints) {

        var hintResults = session.getHints(query, getStringMatcher());
        if (hintResults.needGuesses) {
            var guessesResponse = ScopeManager.requestGuesses(session,
                session.editor.document);

            if (!$deferredHints) {
                $deferredHints = $.Deferred();
            }

            guessesResponse.done(function () {
                if (hintsArePending($deferredHints)) {
                    hintResults = session.getHints(query, getStringMatcher());
                    setCachedHintContext(hintResults.hints, cursor, type, token);
                    var hintResponse = getHintResponse(cachedHints, query, type);
                    $deferredHints.resolveWith(null, [hintResponse]);
                }
            }).fail(function () {
                if (hintsArePending($deferredHints)) {
                    $deferredHints.reject();
                }
            });

            return $deferredHints;
        } else if (hintsArePending($deferredHints)) {
            setCachedHintContext(hintResults.hints, cursor, type, token);
            var hintResponse    = getHintResponse(cachedHints, query, type);
            $deferredHints.resolveWith(null, [hintResponse]);
            return null;
        } else {
            setCachedHintContext(hintResults.hints, cursor, type, token);
            return getHintResponse(cachedHints, query, type);
        }
    }
function getSessionHints(query, cursor, type, token, $deferredHints) {

        var hintResults = session.getHints(query, getStringMatcher());
        if (hintResults.needGuesses) {
            var guessesResponse = ScopeManager.requestGuesses(session,
                session.editor.document);

            if (!$deferredHints) {
                $deferredHints = $.Deferred();
            }

            guessesResponse.done(function () {
                if (hintsArePending($deferredHints)) {
                    hintResults = session.getHints(query, getStringMatcher());
                    setCachedHintContext(hintResults.hints, cursor, type, token);
                    var hintResponse = getHintResponse(cachedHints, query, type);
                    $deferredHints.resolveWith(null, [hintResponse]);
                }
            }).fail(function () {
                if (hintsArePending($deferredHints)) {
                    $deferredHints.reject();
                }
            });

            return $deferredHints;
        } else if (hintsArePending($deferredHints)) {
            setCachedHintContext(hintResults.hints, cursor, type, token);
            var hintResponse    = getHintResponse(cachedHints, query, type);
            $deferredHints.resolveWith(null, [hintResponse]);
            return null;
        } else {
            setCachedHintContext(hintResults.hints, cursor, type, token);
            return getHintResponse(cachedHints, query, type);
        }
    }
function getSessionHints ( query , cursor , type , token , $deferredHints ) { var hintResults = session . getHints ( query , getStringMatcher ( ) ) ; if ( hintResults . needGuesses ) { var guessesResponse = ScopeManager . requestGuesses ( session , session . editor . document ) ; if ( ! $deferredHints ) { $deferredHints = $ . Deferred ( ) ; } guessesResponse . done ( function ( ) { if ( hintsArePending ( $deferredHints ) ) { hintResults = session . getHints ( query , getStringMatcher ( ) ) ; setCachedHintContext ( hintResults . hints , cursor , type , token ) ; var hintResponse = getHintResponse ( cachedHints , query , type ) ; $deferredHints . resolveWith ( null , [ hintResponse ] ) ; } } ) . fail ( function ( ) { if ( hintsArePending ( $deferredHints ) ) { $deferredHints . reject ( ) ; } } ) ; return $deferredHints ; } else if ( hintsArePending ( $deferredHints ) ) { setCachedHintContext ( hintResults . hints , cursor , type , token ) ; var hintResponse = getHintResponse ( cachedHints , query , type ) ; $deferredHints . resolveWith ( null , [ hintResponse ] ) ; return null ; } else { setCachedHintContext ( hintResults . hints , cursor , type , token ) ; return getHintResponse ( cachedHints , query , type ) ; } }
Common code to get the session hints. Will get guesses if there were
no completions for the query.

@param {string} query - user text to search hints with
@param {{line:number, ch:number}} cursor - the location where the hints
were created.
@param {{property: boolean,
showFunctionType:boolean,
context: string,
functionCallPos: {line:number, ch:number}}} type -
type information about the hints
@param {Object} token - CodeMirror token
@param {jQuery.Deferred=} $deferredHints - existing Deferred we need to
resolve (optional). If not supplied a new Deferred will be created if
needed.
@return {Object + jQuery.Deferred} - hint response (immediate or
deferred) as defined by the CodeHintManager API
Common code to get the session hints . Will get guesses if there were no completions for the query .
Get session hints