From 50b4d5aa8c324dc96a82db8dbc6a720367cfbeb6 Mon Sep 17 00:00:00 2001 From: vivganes Date: Tue, 16 Sep 2025 02:32:01 +0530 Subject: [PATCH 1/2] fix failing tests for markdown detection --- src/extension/prompt/common/codeGuesser.ts | 10 ++++++++++ src/extension/prompt/node/test/codeGuesser.spec.ts | 11 ++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/extension/prompt/common/codeGuesser.ts b/src/extension/prompt/common/codeGuesser.ts index 2d4b46265..4eebb7694 100644 --- a/src/extension/prompt/common/codeGuesser.ts +++ b/src/extension/prompt/common/codeGuesser.ts @@ -37,6 +37,16 @@ function guessLineType(line: string): GuessedLineType { return GuessedLineType.Code; } + // If the line starts with a '#' followed by a space, it's possibly markdown header + // A popular exception is if the line contains C/C++ preprocessor directives + if (line.match(/^#+ .+$/)) { + const commonCppDirectives = ['# include', '# define', '# ifdef', '# ifndef', '# endif', '# pragma', '# if', '# else', '# elif', '# undef', '# error', '# line', '# warning']; + // If line does not contain any # directives used in C, C++. + if (!commonCppDirectives.some(directive => line.trim().startsWith(directive))) { + return GuessedLineType.NaturalLanguage; + } + } + // Natural Language Hints { // if the first character is upper-case diff --git a/src/extension/prompt/node/test/codeGuesser.spec.ts b/src/extension/prompt/node/test/codeGuesser.spec.ts index 0dcae18ea..99feed668 100644 --- a/src/extension/prompt/node/test/codeGuesser.spec.ts +++ b/src/extension/prompt/node/test/codeGuesser.spec.ts @@ -79,22 +79,27 @@ suite('codeGuesser', () => { assert.strictEqual(looksLikeCode(xmlSnippet), true); }); - test.skip('looksLikeCode - detects YAML as code', () => { + test('looksLikeCode - detects YAML as code', () => { const yamlSnippet = 'key: value'; assert.strictEqual(looksLikeCode(yamlSnippet), true); }); - test.skip('looksLikeCode - detects Markdown as non-code', () => { + test('looksLikeCode - detects Markdown as non-code', () => { const markdownSnippet = '# This is a heading'; assert.strictEqual(looksLikeCode(markdownSnippet), false); }); + test('looksLikeCode - detects C++ preprocessor directive as code', () => { + const cppPreprocessorSnippet = '# include '; + assert.strictEqual(looksLikeCode(cppPreprocessorSnippet), true); + }); + test('looksLikeCode - detects plain text as non-code', () => { const plainTextSnippet = 'Just some plain text.'; assert.strictEqual(looksLikeCode(plainTextSnippet), false); }); - test.skip('looksLikeCode - detects shell script as code', () => { + test('looksLikeCode - detects shell script as code', () => { const shellSnippet = 'echo "Hello World"'; assert.strictEqual(looksLikeCode(shellSnippet), true); }); From a6b283c8775bbb3acf26fea2a47b9cadbd7cadda Mon Sep 17 00:00:00 2001 From: vivganes Date: Tue, 16 Sep 2025 02:48:07 +0530 Subject: [PATCH 2/2] fix review comments --- src/extension/prompt/common/codeGuesser.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/extension/prompt/common/codeGuesser.ts b/src/extension/prompt/common/codeGuesser.ts index 4eebb7694..b08c6b767 100644 --- a/src/extension/prompt/common/codeGuesser.ts +++ b/src/extension/prompt/common/codeGuesser.ts @@ -19,6 +19,9 @@ const enum GuessedLineType { NaturalLanguage } +const commonCppDirectives = ['# include', '# define', '# ifdef', '# ifndef', '# endif', '# pragma', '# if', '# else', '# elif', '# undef', '# error', '# line', '# warning']; + + function guessLineType(line: string): GuessedLineType { if (line.length === 0) { return GuessedLineType.Unknown; @@ -37,10 +40,9 @@ function guessLineType(line: string): GuessedLineType { return GuessedLineType.Code; } - // If the line starts with a '#' followed by a space, it's possibly markdown header + // If the line starts with '#'s followed by a space, it's possibly markdown header // A popular exception is if the line contains C/C++ preprocessor directives if (line.match(/^#+ .+$/)) { - const commonCppDirectives = ['# include', '# define', '# ifdef', '# ifndef', '# endif', '# pragma', '# if', '# else', '# elif', '# undef', '# error', '# line', '# warning']; // If line does not contain any # directives used in C, C++. if (!commonCppDirectives.some(directive => line.trim().startsWith(directive))) { return GuessedLineType.NaturalLanguage;