@@ -5,10 +5,21 @@ const memoize = require("mem");
55
66const reHasPragma = / @ p r e t t i e r | @ f o r m a t / ;
77
8- const extractDocBlocks = memoize ( text => {
8+ const getPageLevelDocBlock = memoize ( text => {
99 const parsed = parse ( text ) ;
1010
11- return parsed . comments . filter ( el => el . kind === "commentblock" ) ;
11+ const [ firstChild ] = parsed . children ;
12+ const [ firstDocBlock ] = parsed . comments . filter (
13+ el => el . kind === "commentblock"
14+ ) ;
15+
16+ if (
17+ firstChild &&
18+ firstDocBlock &&
19+ firstDocBlock . loc . start . line < firstChild . loc . start . line
20+ ) {
21+ return firstDocBlock ;
22+ }
1223} ) ;
1324
1425function guessLineEnding ( text ) {
@@ -27,10 +38,10 @@ function hasPragma(text) {
2738 return false ;
2839 }
2940
30- const [ firstDocBlock ] = extractDocBlocks ( text ) ;
41+ const pageLevelDocBlock = getPageLevelDocBlock ( text ) ;
3142
32- if ( firstDocBlock ) {
33- const { value } = firstDocBlock ;
43+ if ( pageLevelDocBlock ) {
44+ const { value } = pageLevelDocBlock ;
3445
3546 return reHasPragma . test ( value ) ;
3647 }
@@ -59,17 +70,17 @@ function injectPragma(docblock, text) {
5970}
6071
6172function insertPragma ( text ) {
62- const [ firstDocBlock ] = extractDocBlocks ( text ) ;
73+ const pageLevelDocBlock = getPageLevelDocBlock ( text ) ;
6374
64- if ( firstDocBlock ) {
75+ if ( pageLevelDocBlock ) {
6576 const {
6677 start : { offset : startOffset } ,
6778 end : { offset : endOffset }
68- } = firstDocBlock . loc ;
79+ } = pageLevelDocBlock . loc ;
6980 const before = text . substring ( 0 , startOffset ) ;
7081 const after = text . substring ( endOffset ) ;
7182
72- return `${ before } ${ injectPragma ( firstDocBlock . value , text ) } ${ after } ` ;
83+ return `${ before } ${ injectPragma ( pageLevelDocBlock . value , text ) } ${ after } ` ;
7384 }
7485
7586 const openTag = "<?php" ;
0 commit comments