public override string CalculateInjectionIndent()

in resharper/resharper-unity/src/Unity.Shaders/HlslSupport/Feature/Services/TypingAssists/InjectedHlslDummyFormatter.cs [32:68]


        public override string CalculateInjectionIndent(CppDummyFormatterContext context, CachingLexer lexer)
        {
            var offset = context.TextControl.Caret.DocumentOffset().Offset;
            using (LexerStateCookie.Create(lexer))
            {
                if (!lexer.FindTokenAt(offset))
                    return "";

                var tt = lexer.TokenType;
                while (tt != null)
                {
                    lexer.Advance(-1);
                    tt = lexer.TokenType;

                    if (tt == ShaderLabTokenType.CG_PROGRAM || tt == ShaderLabTokenType.CG_INCLUDE ||
                        tt == ShaderLabTokenType.HLSL_PROGRAM || tt == ShaderLabTokenType.HLSL_INCLUDE ||
                        tt == ShaderLabTokenType.GLSL_PROGRAM || tt == ShaderLabTokenType.GLSL_INCLUDE)
                        break;
                }

                if (tt != null)
                {
                    var blockStartPos = lexer.CurrentPosition;
                    for (lexer.Advance(); lexer.TokenEnd <= offset && (tt = lexer.TokenType) is { IsWhitespace: true }; lexer.Advance()) { } // skip to next non-whitespace token 

                    // if next non-empty token is end of block then reset to block start otherwise use offset of first line in the block 
                    if (tt == ShaderLabTokenType.CG_END ||
                        tt == ShaderLabTokenType.HLSL_END ||
                        tt == ShaderLabTokenType.GLSL_END)
                        lexer.CurrentPosition = blockStartPos;
                    
                    return CalculateLineIndent(context, lexer);
                }
            }

            return "";
        }