Comments (3)
Aha! Good catch. Now I understand why the built-in tokenizer produces ArrayCast/BoolCast/etc. Tokens.
We should be able to just remove the call to parseCastExpressionGranular (which I had initially kept around to remain backwards compatible with the old lexer, and potentially to provide some nicer error handling in the future, but now we can just remove it.)
https://github.com/Microsoft/tolerant-php-parser/blob/master/src/Parser.php#L1459
Also, this would make a good first PR
from tolerant-php-parser.
Another option is to keep all these tokens, and parse like you're doing, but give a message stating that there can't be anything between the (
type
and )
.
Or, your parser can check the tokens as it is parsing, and only accept this production if there is no trivia between them.
--
Note C# has this for when it sees >>
. Those are two separate tokens (so they can be used in List<List<int>>
). But in an expression context it gets accepted as 'right shift' when there is no trivia between the tokens. i.e. we would not accept a >/**/> b
.
from tolerant-php-parser.
<?php
define('int', 'i am a string');
echo (/**/int); // prints "i am a string"
There can't be a message because the snippet above is valid code. So if the code were modified to add:
$a = ' really';
echo (/**/int)$a;
...then the error should be an unexpected variable, not an invalid cast error.
Since the parser uses PHP's own tokenizer, the second case would already return a cast token as well, so it's forced into the correct production.
from tolerant-php-parser.
Related Issues (20)
- Publish a 0.0.23 release? HOT 1
- Project motivation / VS Code / IDE support? HOT 7
- Publish a 0.0.25 release?
- Support php 8.1 intersection types, new token constants
- Spurious failure on nested conditionals without parentheses
- Single word namespaces which are reserved words produce an error incorrectly HOT 1
- `match` is not categorized as Keyword HOT 1
- Support parsing php 8.2 Disjunctive Normal Form types (`(A&B)|C`) HOT 1
- Support php 8.1 `never` return type, add to returnTypeDeclarationTokens
- Using `void` as a parameter/property type is a compilation error, not a parse error
- Publish a new release supporting php 8.2 syntax? HOT 10
- Idea: Start converting older tokenization to php 8.0 T_NAME_QUALIFIED/T_NAME_RELATIVE/T_NAME_FULLY_QUALIFIED
- Support `__halt_compiler` as a member of the top level statements
- PHP 8.2 would deprecate dynamic properties by default: Consider `#[\AllowDynamicProperties]`
- Regression with namespace names vs. MissingToken HOT 2
- match is a valid method name HOT 2
- EnumDeclaration does not support classInterfaceClause HOT 1
- Quoted string parsing doesn't work as expected
- Why is QualifiedName::getResolvedName disabled for Node\TraitUseClause? HOT 4
- Migrate Travis CI checks to GitHub workflows HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tolerant-php-parser.