@@ -107,28 +107,34 @@ export function isLineInsideFrontMatter(lines: string[], lineIndex: number): boo
107107 */
108108export function isPositionInsideCode ( lines : string [ ] , lineIndex : number , charIndex : number ) : boolean {
109109 // Check fenced code block — scan up to lineIndex tracking open/close state
110- const fencePattern = / ^ ( \s * ( ` { 3 , } | ~ { 3 , } ) ) / ;
110+ const standaloneFencePattern = / ^ \s * ( ` { 3 , } | ~ { 3 , } ) / ;
111+ const bulletOwnedFencePattern = / ^ \s * - \s (?: \[ [ x X ] \] \s ) ? (?: .* \s ) ? ( ` { 3 , } | ~ { 3 , } ) \S * \s * $ / ;
111112 let inFence = false ;
112113 let fenceChar = '' ;
113114 let fenceLen = 0 ;
114115 for ( let i = 0 ; i <= lineIndex ; i ++ ) {
115- const m = fencePattern . exec ( lines [ i ] ) ;
116- if ( m ) {
117- const char = m [ 2 ] [ 0 ] ; // ` or ~
118- const len = m [ 2 ] . length ;
119- if ( ! inFence ) {
120- // Opening fence
121- inFence = true ;
122- fenceChar = char ;
123- fenceLen = len ;
124- } else if ( char === fenceChar && len >= fenceLen ) {
125- // Closing fence — same char, at least as many markers
126- inFence = false ;
127- fenceChar = '' ;
128- fenceLen = 0 ;
129- }
130- // Otherwise it's a different fence type or shorter — ignored
116+ const line = lines [ i ] ?? '' ;
117+ const standaloneMatch = standaloneFencePattern . exec ( line ) ;
118+ const bulletOwnedMatch = bulletOwnedFencePattern . exec ( line ) ;
119+ const marker = standaloneMatch ?. [ 1 ] ?? bulletOwnedMatch ?. [ 1 ] ;
120+ if ( ! marker ) {
121+ continue ;
122+ }
123+
124+ const char = marker [ 0 ] ; // ` or ~
125+ const len = marker . length ;
126+ if ( ! inFence ) {
127+ // Opening fence
128+ inFence = true ;
129+ fenceChar = char ;
130+ fenceLen = len ;
131+ } else if ( char === fenceChar && len >= fenceLen ) {
132+ // Closing fence — same char, at least as many markers
133+ inFence = false ;
134+ fenceChar = '' ;
135+ fenceLen = 0 ;
131136 }
137+ // Otherwise it's a different fence type or shorter — ignored
132138 }
133139 // If we're still inside a fence at lineIndex, cursor is in a code block.
134140 // The opening fence line itself is part of the block, but content starts
0 commit comments