prettier-plugin-glsl
Advanced tools
Comparing version 0.0.3 to 0.0.4
@@ -194,8 +194,13 @@ import { IToken } from "chevrotain"; | ||
initExpression: Expression; | ||
body: CompoundStatement; | ||
cases: CaseBlock[]; | ||
} | ||
export interface CaseLabel extends BaseNode { | ||
kind: "caseLabel"; | ||
_case: Expression | undefined; | ||
case_: Expression | undefined; | ||
} | ||
export interface CaseBlock extends BaseNode { | ||
kind: "caseBlock"; | ||
caseLabel: CaseLabel; | ||
statements: Statement[]; | ||
} | ||
export interface FullySpecifiedType extends BaseNode { | ||
@@ -270,3 +275,3 @@ kind: "fullySpecifiedType"; | ||
export declare type Statement = CaseLabel | CompoundStatement | ExpressionStatement | IterationStatement | JumpStatement | SelectionStatement | SwitchStatement | InitDeclaratorListDeclaration | PpNode; | ||
export declare type Node = ArraySpecifier | Declaration | Declarator | Expression | FullySpecifiedType | LayoutQualifier | ParameterDeclaration | Statement | StorageQualifier | StructDeclaration | StructSpecifier | TranslationUnit | TypeQualifier | TypeSpecifier | PpNode; | ||
export declare type Node = ArraySpecifier | CaseBlock | Declaration | Declarator | Expression | FullySpecifiedType | LayoutQualifier | ParameterDeclaration | PpNode | Statement | StorageQualifier | StructDeclaration | StructSpecifier | TranslationUnit | TypeQualifier | TypeSpecifier; | ||
export declare class AbstractVisitor<R> { | ||
@@ -306,2 +311,3 @@ protected visit(n: Node | undefined): R | undefined; | ||
protected caseLabel(n: CaseLabel): R | undefined; | ||
protected caseBlock(n: CaseBlock): R | undefined; | ||
protected fullySpecifiedType(n: FullySpecifiedType): R | undefined; | ||
@@ -320,2 +326,3 @@ protected typeQualifier(n: TypeQualifier): R | undefined; | ||
protected ppCall(_n: PpCall): R | undefined; | ||
protected ppPragma(_n: PpCall): R | undefined; | ||
} | ||
@@ -322,0 +329,0 @@ export declare function isToken(x: IToken | Node): x is IToken; |
import { EmbeddedActionsParser, IRecognitionException, IRuleConfig, IToken, TokenType } from "chevrotain"; | ||
import { ArraySpecifier, CaseLabel, CompoundStatement, Declaration, Expression, ExpressionStatement, FullySpecifiedType, FunctionCall, InitDeclaratorListDeclaration, IterationStatement, JumpStatement, LayoutQualifier, Node, ParameterDeclaration, PpCall, PpDefine, PpDir, PpExtension, PpNode, PpPragma, SelectionStatement, Statement, StorageQualifier, StructDeclaration, StructSpecifier, SwitchStatement, Token, TranslationUnit, TypeQualifier, TypeSpecifier, UniformBlock } from "./nodes"; | ||
import { ArraySpecifier, CaseBlock, CaseLabel, CompoundStatement, Declaration, Expression, ExpressionStatement, FullySpecifiedType, FunctionCall, InitDeclaratorListDeclaration, IterationStatement, JumpStatement, LayoutQualifier, Node, ParameterDeclaration, PpCall, PpDefine, PpDir, PpExtension, PpNode, PpPragma, SelectionStatement, Statement, StorageQualifier, StructDeclaration, StructSpecifier, SwitchStatement, Token, TranslationUnit, TypeQualifier, TypeSpecifier, UniformBlock } from "./nodes"; | ||
declare class GLSLParser extends EmbeddedActionsParser { | ||
@@ -19,2 +19,3 @@ multiplicativeExpression: () => Expression; | ||
switchStatement: () => SwitchStatement; | ||
caseBlock: () => CaseBlock; | ||
jumpStatement: () => JumpStatement; | ||
@@ -21,0 +22,0 @@ primaryExpression: () => Expression; |
@@ -12,3 +12,3 @@ { | ||
], | ||
"version": "0.0.3", | ||
"version": "0.0.4", | ||
"description": "Prettier (https://prettier.io) plugin for GLSL (OpenGL Shading Language).", | ||
@@ -50,8 +50,8 @@ "exports": "./lib/prettier-plugin.cjs.js", | ||
"@types/lodash": "^4.14.180", | ||
"@types/node": "^17.0.21", | ||
"@types/node": "^17.0.23", | ||
"@types/node-fetch": "^2.6.1", | ||
"@types/prettier": "^2.4.4", | ||
"@typescript-eslint/eslint-plugin": "^5.15.0", | ||
"@typescript-eslint/parser": "^5.15.0", | ||
"eslint": "^8.11.0", | ||
"@typescript-eslint/eslint-plugin": "^5.16.0", | ||
"@typescript-eslint/parser": "^5.16.0", | ||
"eslint": "^8.12.0", | ||
"eslint-config-prettier": "^8.5.0", | ||
@@ -65,3 +65,3 @@ "eslint-plugin-cflint": "^1.0.0", | ||
"rollup-plugin-terser": "^7.0.2", | ||
"ts-jest": "^27.1.3", | ||
"ts-jest": "^27.1.4", | ||
"ts-node-dev": "^1.1.8" | ||
@@ -68,0 +68,0 @@ }, |
@@ -1,3 +0,3 @@ | ||
![npm](https://img.shields.io/npm/v/prettier-plugin-glsl?style=flat-square) | ||
![NPM](https://img.shields.io/npm/l/prettier-plugin-glsl?style=flat-square) | ||
[![npm](https://img.shields.io/npm/v/prettier-plugin-glsl?style=flat-square)](https://www.npmjs.com/package/prettier-plugin-glsl) | ||
[![NPM](https://img.shields.io/npm/l/prettier-plugin-glsl?style=flat-square)](https://github.com/NaridaL/glsl-language-toolkit/blob/main/packages/prettier-plugin-glsl/LICENSE) | ||
@@ -8,3 +8,3 @@ # prettier-plugin-glsl | ||
formatter, for GLSL, the shading language used in WebGL and other places. It | ||
uses a custom parser based on [chevrotain](https://chevrotain.io/) and does not | ||
uses a custom parser based on [Chevrotain](https://chevrotain.io/) and does not | ||
require any external dependencies. | ||
@@ -30,3 +30,3 @@ | ||
<!-- Printed at 60 wide, so it fits on npm.js renderer site. --> | ||
<!-- Printed at 60 wide, so it fits on npmjs.com rendered site. --> | ||
@@ -74,4 +74,4 @@ ```glsl | ||
```glsl | ||
#define LPAREN | ||
void main() LPAREN | ||
#define LBRACE { | ||
void main() LBRACE | ||
} | ||
@@ -88,19 +88,19 @@ ``` | ||
void main() { | ||
// ... | ||
#if AA > 1 | ||
for (int m = ZERO; m < AA; m++) | ||
for (int n = ZERO; n < AA; n++) { | ||
// pixel coordinates | ||
vec2 o = vec2(float(m), float(n)) / float(AA) - 0.5; | ||
vec2 p = (2.0 * (fragCoord + o) - iResolution.xy) / iResolution.y; | ||
#else | ||
vec2 p = (2.0 * fragCoord - iResolution.xy) / iResolution.y; | ||
#endif | ||
// ... | ||
#if AA > 1 | ||
for (int m = ZERO; m < AA; m++) | ||
for (int n = ZERO; n < AA; n++) { | ||
// pixel coordinates | ||
vec2 o = vec2(float(m), float(n)) / float(AA) - 0.5; | ||
vec2 p = (2.0 * (fragCoord + o) - iResolution.xy) / iResolution.y; | ||
#else | ||
vec2 p = (2.0 * fragCoord - iResolution.xy) / iResolution.y; | ||
#endif | ||
// use p | ||
// use p | ||
#if AA > 1 | ||
} | ||
tot /= float(AA * AA); | ||
#endif | ||
#if AA > 1 | ||
} | ||
tot /= float(AA * AA); | ||
#endif | ||
} | ||
@@ -107,0 +107,0 @@ ``` |
@@ -269,3 +269,3 @@ import { IToken } from "chevrotain" | ||
initExpression: Expression | ||
body: CompoundStatement | ||
cases: CaseBlock[] | ||
} | ||
@@ -275,5 +275,11 @@ | ||
kind: "caseLabel" | ||
_case: Expression | undefined | ||
case_: Expression | undefined | ||
} | ||
export interface CaseBlock extends BaseNode { | ||
kind: "caseBlock" | ||
caseLabel: CaseLabel | ||
statements: Statement[] | ||
} | ||
export interface FullySpecifiedType extends BaseNode { | ||
@@ -383,2 +389,3 @@ kind: "fullySpecifiedType" | ||
| ArraySpecifier | ||
| CaseBlock | ||
| Declaration | ||
@@ -390,2 +397,3 @@ | Declarator | ||
| ParameterDeclaration | ||
| PpNode | ||
| Statement | ||
@@ -398,3 +406,2 @@ | StorageQualifier | ||
| TypeSpecifier | ||
| PpNode | ||
@@ -592,3 +599,5 @@ export class AbstractVisitor<R> { | ||
this.visit(n.initExpression) | ||
this.visit(n.body) | ||
for (const c of n.cases) { | ||
this.visit(c) | ||
} | ||
return | ||
@@ -598,6 +607,11 @@ } | ||
protected caseLabel(n: CaseLabel): R | undefined { | ||
this.visit(n._case) | ||
this.visit(n.case_) | ||
return | ||
} | ||
protected caseBlock(n: CaseBlock): R | undefined { | ||
this.visit(n.case_) | ||
return | ||
} | ||
protected fullySpecifiedType(n: FullySpecifiedType): R | undefined { | ||
@@ -671,2 +685,6 @@ this.visit(n.typeQualifier) | ||
} | ||
protected ppPragma(_n: PpCall): R | undefined { | ||
return | ||
} | ||
} | ||
@@ -673,0 +691,0 @@ |
@@ -14,2 +14,3 @@ /* eslint-disable @typescript-eslint/member-ordering */ | ||
ArraySpecifier, | ||
CaseBlock, | ||
CaseLabel, | ||
@@ -57,9 +58,3 @@ CompoundStatement, | ||
} from "./nodes" | ||
import { | ||
ALL_TOKENS, | ||
checkLexingErrors, | ||
GLSL_LEXER, | ||
RESERVED_KEYWORDS, | ||
TOKEN, | ||
} from "./lexer" | ||
import { ALL_TOKENS, checkLexingErrors, GLSL_LEXER, RESERVED_KEYWORDS, TOKEN } from "./lexer" | ||
import { DEV, ExpandedLocation, substrContext } from "./util" | ||
@@ -331,2 +326,10 @@ import { applyLineContinuations, fixLocations } from "./preprocessor" | ||
//SPEC statement_list | ||
// public switchStatement = this.RR("switchStatement", (): SwitchStatement => { | ||
// this.CONSUME(TOKEN.SWITCH) | ||
// this.CONSUME(TOKEN.LEFT_PAREN) | ||
// const initExpression = this.SUBRULE(this.expression) | ||
// this.CONSUME(TOKEN.RIGHT_PAREN) | ||
// const body = this.SUBRULE(this.compoundStatement, { ARGS: [true] }) | ||
// return { kind: "switchStatement", initExpression, body } | ||
// }) | ||
public switchStatement = this.RR("switchStatement", (): SwitchStatement => { | ||
@@ -337,5 +340,15 @@ this.CONSUME(TOKEN.SWITCH) | ||
this.CONSUME(TOKEN.RIGHT_PAREN) | ||
const body = this.SUBRULE(this.compoundStatement, { ARGS: [true] }) | ||
return { kind: "switchStatement", initExpression, body } | ||
this.CONSUME(TOKEN.LEFT_BRACE) | ||
const cases: CaseBlock[] = [] | ||
this.MANY(() => cases.push(this.SUBRULE(this.caseBlock))) | ||
this.CONSUME(TOKEN.RIGHT_BRACE) | ||
return { kind: "switchStatement", initExpression, cases } | ||
}) | ||
public caseBlock = this.RR("caseBlock", (): CaseBlock => { | ||
const caseLabel = this.SUBRULE(this.caseLabel) | ||
const statements: Statement[] = [] | ||
this.MANY1(() => statements.push(this.SUBRULE(this.statement))) | ||
return { kind: "caseBlock", caseLabel, statements } | ||
}) | ||
//SPEC init_declarator_list: | ||
@@ -1076,5 +1089,5 @@ //SPEC single_declaration | ||
this.CONSUME(TOKEN.CASE) | ||
const _case = this.SUBRULE(this.expression) | ||
const case_ = this.SUBRULE(this.expression) | ||
this.CONSUME(TOKEN.COLON) | ||
return { kind: "caseLabel", _case } | ||
return { kind: "caseLabel", case_ } | ||
}, | ||
@@ -1086,3 +1099,3 @@ }, | ||
this.CONSUME2(TOKEN.COLON) | ||
return { kind: "caseLabel", _case: undefined } | ||
return { kind: "caseLabel", case_: undefined } | ||
}, | ||
@@ -1138,3 +1151,3 @@ }, | ||
{ ALT: () => this.SUBRULE(this.switchStatement) }, | ||
{ ALT: () => this.SUBRULE(this.caseLabel) }, | ||
// { ALT: () => this.SUBRULE(this.caseLabel) }, TODO | ||
{ ALT: () => this.SUBRULE(this.iterationStatement) }, | ||
@@ -1141,0 +1154,0 @@ { ALT: () => this.SUBRULE(this.jumpStatement) }, |
@@ -25,2 +25,3 @@ // noinspection JSUnusedGlobalSymbols | ||
Node, | ||
StructDeclaration, | ||
Token, | ||
@@ -495,15 +496,2 @@ TypeQualifier, | ||
const tok = <N extends Node>( | ||
n: N, | ||
tokenType: TokenType, | ||
index = 0, | ||
): Doc => { | ||
if (!n.tokens) { | ||
return tokenType.PATTERN! as string | ||
} else { | ||
// TODO: get preprocess stuff | ||
return n.tokens.find((t) => t.tokenType === tokenType)!.image | ||
} | ||
} | ||
try { | ||
@@ -637,9 +625,11 @@ switch (n.kind) { | ||
p<typeof n>("fsType"), | ||
" ", | ||
printed.length === 0 ? "" : " ", | ||
printed.length === 1 | ||
? printed | ||
: indent( | ||
join( | ||
[",", hasInit && !isParentForLoop ? hardline : line], | ||
printed, | ||
: group( | ||
indent( | ||
join( | ||
[",", hasInit && !isParentForLoop ? hardline : line], | ||
printed, | ||
), | ||
), | ||
@@ -664,3 +654,8 @@ ), | ||
case "arraySpecifier": | ||
return ["[", p<typeof n>("size"), "]"] | ||
return group([ | ||
"[", | ||
indent([softline, p<typeof n>("size")]), | ||
softline, | ||
"]", | ||
]) | ||
case "arrayAccess": | ||
@@ -673,3 +668,15 @@ return [ | ||
] | ||
case "structSpecifier": | ||
case "structSpecifier": { | ||
const parts: Doc = [] | ||
path.each((path, index, declarations: StructDeclaration[]) => { | ||
const value = path.getValue() | ||
parts.push(hardline) | ||
parts.push(print(path)) | ||
if ( | ||
index !== declarations.length - 1 && | ||
util.isNextLineEmpty(options.originalText, value, locEnd) | ||
) { | ||
parts.push(hardline) | ||
} | ||
}, "declarations") | ||
return group([ | ||
@@ -679,9 +686,7 @@ "struct", | ||
" {", | ||
indent([ | ||
hardline, | ||
join(hardline, path.map(print, "declarations")), | ||
]), | ||
indent(parts), | ||
hardline, | ||
"}", | ||
]) | ||
} | ||
@@ -696,3 +701,3 @@ ///////// STATEMENTS | ||
path.each((path, index, statements) => { | ||
path.each((path, index) => { | ||
const value = path.getValue() | ||
@@ -836,7 +841,7 @@ if (index !== 0) { | ||
return [ | ||
"do", | ||
"do ", | ||
p<typeof n>("statement"), | ||
"while (", | ||
" while (", | ||
group(p<typeof n>("conditionExpression")), | ||
")", | ||
");", | ||
] | ||
@@ -1055,2 +1060,35 @@ | ||
} | ||
case "switchStatement": { | ||
return [ | ||
"switch (", | ||
group([ | ||
indent([softline, p<typeof n>("initExpression")]), | ||
softline, | ||
]), | ||
") {", | ||
n.cases.length | ||
? indent([hardline, join(hardline, path.map(print, "cases"))]) | ||
: "", | ||
hardline, | ||
"}", | ||
] | ||
} | ||
case "caseBlock": { | ||
const caseLabel = p<typeof n>("caseLabel") | ||
const parts: Doc = [] | ||
path.each((path, index) => { | ||
const value = path.getValue() | ||
parts.push(hardline) | ||
parts.push(print(path)) | ||
if (util.isNextLineEmpty(options.originalText, value, locEnd)) { | ||
parts.push(hardline) | ||
} | ||
}, "statements") | ||
return [caseLabel, indent(parts)] | ||
} | ||
case "caseLabel": { | ||
return n.case_ === undefined | ||
? "default:" | ||
: ["case ", p<typeof n>("case_"), ":"] | ||
} | ||
default: | ||
@@ -1099,3 +1137,3 @@ throw new Error( | ||
.trim() | ||
const formattedSource = format(src, { | ||
const formattedComment = format(src, { | ||
...options, | ||
@@ -1107,9 +1145,9 @@ printWidth: options.printWidth - 3, | ||
}) | ||
const formattedSourceLines = formattedSource.split("\n") | ||
const formattedCommentLines = formattedComment.split("\n") | ||
// Remove the final newline which markdown formatter always adds. | ||
formattedSourceLines.pop() | ||
formattedCommentLines.pop() | ||
return ( | ||
"/**\n" + | ||
formattedSourceLines | ||
formattedCommentLines | ||
.map((l) => (l === "" ? " *" : " * " + l)) | ||
@@ -1116,0 +1154,0 @@ .join("\n") + |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
532847
11710