From fc68244f36befb24ed77cd2483215b15ef30af0e Mon Sep 17 00:00:00 2001 From: Filip Stanis Date: Wed, 4 Dec 2019 23:49:18 +0000 Subject: [PATCH] Update css-tree types: `some` returns boolean, add find, findLast, findAll (#40770) * Update css-tree types: `some` returns boolean, add find, findLast and findAll * use better types when visit parameter is set --- types/css-tree/css-tree-tests.ts | 25 +++++++++++- types/css-tree/index.d.ts | 65 +++++++++++++++++++++++++++++--- 2 files changed, 83 insertions(+), 7 deletions(-) diff --git a/types/css-tree/css-tree-tests.ts b/types/css-tree/css-tree-tests.ts index 5880c1ddd0..f5db65caed 100644 --- a/types/css-tree/css-tree-tests.ts +++ b/types/css-tree/css-tree-tests.ts @@ -18,7 +18,7 @@ csstree.walk(ast, { enter(node, item, list) { this.root; // $ExpectType CssNode this.stylesheet; // $ExpectType StyleSheet | null - node; // $ExpectType CssNode + node; // $ExpectType ClassSelector item; // $ExpectType ListItem list; // $ExpectType List this.atrule; // $ExpectType Atrule | null @@ -26,7 +26,7 @@ csstree.walk(ast, { leave(node, item, list) { this.root; // $ExpectType CssNode this.stylesheet; // $ExpectType StyleSheet | null - node; // $ExpectType CssNode + node; // $ExpectType ClassSelector item; // $ExpectType ListItem list; // $ExpectType List this.atrule; // $ExpectType Atrule | null @@ -35,6 +35,27 @@ csstree.walk(ast, { reverse: false, }); +csstree.find(ast, (node, item, list) => { + node; // $ExpectType CssNode + item; // $ExpectType ListItem + list; // $ExpectType List + return true; +}); + +csstree.findLast(ast, (node, item, list) => { + node; // $ExpectType CssNode + item; // $ExpectType ListItem + list; // $ExpectType List + return true; +}); + +csstree.findAll(ast, (node, item, list) => { + node; // $ExpectType CssNode + item; // $ExpectType ListItem + list; // $ExpectType List + return true; +}); + csstree.generate(ast); // $ExpectType string csstree.generate(ast, {}); // $ExpectType string diff --git a/types/css-tree/index.d.ts b/types/css-tree/index.d.ts index 1e99801489..dcbd03d0e6 100644 --- a/types/css-tree/index.d.ts +++ b/types/css-tree/index.d.ts @@ -49,8 +49,8 @@ export class List { nextUntil(start: ListItem, fn: IteratorFn): void; prevUntil(start: ListItem, fn: IteratorFn, context: TContext): void; prevUntil(start: ListItem, fn: IteratorFn): void; - some(fn: IteratorFn, context: TContext): void; - some(fn: IteratorFn): void; + some(fn: IteratorFn, context: TContext): boolean; + some(fn: IteratorFn): boolean; map(fn: IteratorFn, context: TContext): List; map(fn: IteratorFn): List; filter(fn: FilterFn, context: TContext): List; @@ -527,17 +527,72 @@ export interface WalkContext { function: FunctionNode | PseudoClassSelector | PseudoElementSelector | null; } -export type EnterOrLeaveFn = (this: WalkContext, node: CssNode, item: ListItem, list: List) => void; +export type EnterOrLeaveFn = (this: WalkContext, node: NodeType, item: ListItem, list: List) => void; -export interface WalkOptions { +export interface WalkOptionsNoVisit { enter?: EnterOrLeaveFn; leave?: EnterOrLeaveFn; - visit?: string; reverse?: boolean; } +export interface WalkOptionsVisit { + visit: NodeTypeName; + enter?: EnterOrLeaveFn; + leave?: EnterOrLeaveFn; + reverse?: boolean; +} + +export type WalkOptions = + WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsVisit + | WalkOptionsNoVisit; + export function walk(ast: CssNode, options: EnterOrLeaveFn | WalkOptions): void; +export type FindFn = (this: WalkContext, node: CssNode, item: ListItem, list: List) => boolean; + +export function find(ast: CssNode, fn: FindFn): CssNode; +export function findLast(ast: CssNode, fn: FindFn): CssNode; +export function findAll(ast: CssNode, fn: FindFn): CssNode[]; + export interface Property { readonly basename: string; readonly name: string;