<?php $string = <<<EOD Merge conflicts in heredocs <<<<<<< HEAD can be problematic. ======= should also be detected. >>>>>>> ref/heads/other-branchname And now they are. EOD; // Heredoc with a merge conflict starter, the closer is outside the heredoc. $string = <<<EOT Merge conflicts in heredocs <<<<<<< HEAD can be problematic. EOD; $a = 1; ======= should also be detected. EOT; >>>>>>> ref/heads/other-branchname // Merge conflict starter outside with a closer inside of the heredoc. // This breaks the tokenizer. <<<<<<< HEAD $string = <<<EOT Merge conflicts in heredocs can be problematic. ======= $differentVarName = <<<EOD Merge conflicts in heredocs should also be detected. >>>>>>> ref/heads/other-branchname EOD; /* * The above tests are based on "normal" tokens. * The below test checks that once the tokenizer breaks down because of * unexpected merge conflict boundaries - i.e. after the first merge conflict * opener in non-comment, non-heredoc/nowdoc, non-inline HTML code -, subsequent * merge conflict boundaries will still be detected correctly. */ $string = <<<EOD Merge conflicts in heredocs <<<<<<< HEAD can be problematic. ======= should also be detected. >>>>>>> ref/heads/other-branchname And now they are. EOD; $string = <<<EOD Merge conflicts in heredocs <<<<<<< HEAD can be problematic. EOD; $a = 1; ======= should also be detected. EOT; >>>>>>> ref/heads/other-branchname