1
0
Fork 0
php-language-server/src/ParserResourceFactory.php

45 lines
1.7 KiB
PHP
Raw Normal View History

2017-03-05 02:36:17 +00:00
<?php
namespace LanguageServer;
use Microsoft\PhpParser as Tolerant;
use LanguageServer\Index\ReadableIndex;
class ParserResourceFactory {
const PARSER_KIND = ParserKind::DIAGNOSTIC_TOLERANT_PHP_PARSER;
private static function getParserKind () {
global $parserKind;
return isset($parserKind) ? $parserKind : self::PARSER_KIND;
}
public static function getParser() {
if (self::getParserKind() === ParserKind::PHP_PARSER || self::getParserKind() === ParserKind::DIAGNOSTIC_PHP_PARSER) {
2017-03-05 02:36:17 +00:00
return new Parser;
} else {
return new Tolerant\Parser;
}
}
public static function getDefinitionResolver(ReadableIndex $index) {
switch (self::getParserKind()) {
case ParserKind::PHP_PARSER:
return new DefinitionResolver($index);
case ParserKind::TOLERANT_PHP_PARSER:
return new TolerantDefinitionResolver($index);
case ParserKind::DIAGNOSTIC_PHP_PARSER:
return new LoggedDefinitionResolver($index);
case ParserKind::DIAGNOSTIC_TOLERANT_PHP_PARSER:
return new LoggedTolerantDefinitionResolver($index);
2017-03-05 02:36:17 +00:00
}
}
public static function getTreeAnalyzer($parser, $content, $docBlockFactory, $definitionResolver, $uri)
{
if (self::getParserKind() === ParserKind::PHP_PARSER || self::getParserKind() === ParserKind::DIAGNOSTIC_PHP_PARSER) {
return new TreeAnalyzer($parser, $content, $docBlockFactory, $definitionResolver, $uri);
} else {
return new TolerantTreeAnalyzer($parser, $content, $docBlockFactory, $definitionResolver, $uri);
}
}
2017-03-05 02:36:17 +00:00
}