css_ast

package
v0.22.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 30, 2024 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var KnownDeclarations = map[string]D{}/* 328 elements not displayed */

Functions

func ComplexSelectorsEqual added in v0.18.14

func ComplexSelectorsEqual(a []ComplexSelector, b []ComplexSelector, check *CrossFileEqualityCheck) bool

func HashComplexSelectors added in v0.18.14

func HashComplexSelectors(hash uint32, selectors []ComplexSelector) uint32

func HashRules added in v0.11.19

func HashRules(hash uint32, rules []Rule) uint32

func HashTokens added in v0.11.19

func HashTokens(hash uint32, tokens []Token) uint32

func MaybeCorrectDeclarationTypo added in v0.14.12

func MaybeCorrectDeclarationTypo(text string) (string, bool)

func RulesEqual added in v0.11.19

func RulesEqual(a []Rule, b []Rule, check *CrossFileEqualityCheck) bool

func TokensAreCommaSeparated added in v0.12.10

func TokensAreCommaSeparated(tokens []Token) bool

func TokensEqual added in v0.11.19

func TokensEqual(a []Token, b []Token, check *CrossFileEqualityCheck) bool

func TokensEqualIgnoringWhitespace added in v0.11.19

func TokensEqualIgnoringWhitespace(a []Token, b []Token) bool

Types

type AST

type AST struct {
	Symbols              []ast.Symbol
	CharFreq             *ast.CharFreq
	ImportRecords        []ast.ImportRecord
	Rules                []Rule
	SourceMapComment     logger.Span
	ApproximateLineCount int32
	LocalSymbols         []ast.LocRef
	LocalScope           map[string]ast.LocRef
	GlobalScope          map[string]ast.LocRef
	Composes             map[ast.Ref]*Composes

	// These contain all layer names in the file. It can be used to replace the
	// layer-related side effects of importing this file. They are split into two
	// groups (those before and after "@import" rules) so that the linker can put
	// them in the right places.
	LayersPreImport  [][]string
	LayersPostImport [][]string
}

type Combinator added in v0.18.14

type Combinator struct {
	Loc  logger.Loc
	Byte uint8 // Optional, may be 0 for no combinator
}

type ComplexSelector

type ComplexSelector struct {
	Selectors []CompoundSelector
}

func (ComplexSelector) CloneWithoutLeadingCombinator added in v0.18.14

func (s ComplexSelector) CloneWithoutLeadingCombinator() ComplexSelector

func (ComplexSelector) Equal added in v0.13.13

func (ComplexSelector) IsRelative added in v0.17.14

func (sel ComplexSelector) IsRelative() bool

func (ComplexSelector) UsesPseudoElement added in v0.17.14

func (sel ComplexSelector) UsesPseudoElement() bool

type Composes added in v0.18.19

type Composes struct {
	// Note that each of these can be either local or global. Local examples:
	//
	//   .foo { composes: bar }
	//   .bar { color: red }
	//
	// Global examples:
	//
	//   .foo { composes: bar from global }
	//   .foo :global { composes: bar }
	//   .foo { :global { composes: bar } }
	//   :global .bar { color: red }
	//
	Names []ast.LocRef

	// Each of these is local in another file. For example:
	//
	//   .foo { composes: bar from "bar.css" }
	//   .foo { composes: bar from url(bar.css) }
	//
	ImportedNames []ImportedComposesName

	// This tracks what CSS properties each class uses so that we can warn when
	// "composes" is used incorrectly to compose two classes from separate files
	// that declare the same CSS properties.
	Properties map[string]logger.Loc
}

type CompoundSelector

type CompoundSelector struct {
	TypeSelector       *NamespacedName
	SubclassSelectors  []SubclassSelector
	NestingSelectorLoc ast.Index32 // "&"
	Combinator         Combinator  // Optional, may be 0

	// If this is true, this is a "&" that was generated by a bare ":local" or ":global"
	WasEmptyFromLocalOrGlobal bool
}

func (CompoundSelector) Clone added in v0.18.14

func (sel CompoundSelector) Clone() CompoundSelector

func (*CompoundSelector) HasNestingSelector added in v0.17.10

func (sel *CompoundSelector) HasNestingSelector() bool

func (CompoundSelector) IsInvalidBecauseEmpty added in v0.18.14

func (sel CompoundSelector) IsInvalidBecauseEmpty() bool

func (CompoundSelector) IsSingleAmpersand added in v0.17.14

func (sel CompoundSelector) IsSingleAmpersand() bool

func (CompoundSelector) Range added in v0.18.19

func (sel CompoundSelector) Range() (r logger.Range)

type CrossFileEqualityCheck added in v0.17.10

type CrossFileEqualityCheck struct {
	ImportRecordsA []ast.ImportRecord
	ImportRecordsB []ast.ImportRecord
	Symbols        ast.SymbolMap
	SourceIndexA   uint32
	SourceIndexB   uint32
}

This is necessary when comparing tokens between two different files

func (*CrossFileEqualityCheck) RefsAreEquivalent added in v0.18.18

func (check *CrossFileEqualityCheck) RefsAreEquivalent(a ast.Ref, b ast.Ref) bool

type D added in v0.7.9

type D uint16
const (
	DUnknown D = iota
	DAlignContent
	DAlignItems
	DAlignSelf
	DAlignmentBaseline
	DAll
	DAnimation
	DAnimationDelay
	DAnimationDirection
	DAnimationDuration
	DAnimationFillMode
	DAnimationIterationCount
	DAnimationName
	DAnimationPlayState
	DAnimationTimingFunction
	DAppearance
	DBackdropFilter
	DBackfaceVisibility
	DBackground
	DBackgroundAttachment
	DBackgroundClip
	DBackgroundColor
	DBackgroundImage
	DBackgroundOrigin
	DBackgroundPosition
	DBackgroundPositionX
	DBackgroundPositionY
	DBackgroundRepeat
	DBackgroundSize
	DBaselineShift
	DBlockSize
	DBorder
	DBorderBlockEnd
	DBorderBlockEndColor
	DBorderBlockEndStyle
	DBorderBlockEndWidth
	DBorderBlockStart
	DBorderBlockStartColor
	DBorderBlockStartStyle
	DBorderBlockStartWidth
	DBorderBottom
	DBorderBottomColor
	DBorderBottomLeftRadius
	DBorderBottomRightRadius
	DBorderBottomStyle
	DBorderBottomWidth
	DBorderCollapse
	DBorderColor
	DBorderImage
	DBorderImageOutset
	DBorderImageRepeat
	DBorderImageSlice
	DBorderImageSource
	DBorderImageWidth
	DBorderInlineEnd
	DBorderInlineEndColor
	DBorderInlineEndStyle
	DBorderInlineEndWidth
	DBorderInlineStart
	DBorderInlineStartColor
	DBorderInlineStartStyle
	DBorderInlineStartWidth
	DBorderLeft
	DBorderLeftColor
	DBorderLeftStyle
	DBorderLeftWidth
	DBorderRadius
	DBorderRight
	DBorderRightColor
	DBorderRightStyle
	DBorderRightWidth
	DBorderSpacing
	DBorderStyle
	DBorderTop
	DBorderTopColor
	DBorderTopLeftRadius
	DBorderTopRightRadius
	DBorderTopStyle
	DBorderTopWidth
	DBorderWidth
	DBottom
	DBoxDecorationBreak
	DBoxShadow
	DBoxSizing
	DBreakAfter
	DBreakBefore
	DBreakInside
	DCaptionSide
	DCaretColor
	DClear
	DClip
	DClipPath
	DClipRule
	DColor
	DColorInterpolation
	DColorInterpolationFilters
	DColumnCount
	DColumnFill
	DColumnGap
	DColumnRule
	DColumnRuleColor
	DColumnRuleStyle
	DColumnRuleWidth
	DColumnSpan
	DColumnWidth
	DColumns
	DComposes
	DContainer
	DContainerName
	DContainerType
	DContent
	DCounterIncrement
	DCounterReset
	DCssFloat
	DCssText
	DCursor
	DDirection
	DDisplay
	DDominantBaseline
	DEmptyCells
	DFill
	DFillOpacity
	DFillRule
	DFilter
	DFlex
	DFlexBasis
	DFlexDirection
	DFlexFlow
	DFlexGrow
	DFlexShrink
	DFlexWrap
	DFloat
	DFloodColor
	DFloodOpacity
	DFont
	DFontFamily
	DFontFeatureSettings
	DFontKerning
	DFontSize
	DFontSizeAdjust
	DFontStretch
	DFontStyle
	DFontSynthesis
	DFontVariant
	DFontVariantCaps
	DFontVariantEastAsian
	DFontVariantLigatures
	DFontVariantNumeric
	DFontVariantPosition
	DFontWeight
	DGap
	DGlyphOrientationVertical
	DGrid
	DGridArea
	DGridAutoColumns
	DGridAutoFlow
	DGridAutoRows
	DGridColumn
	DGridColumnEnd
	DGridColumnGap
	DGridColumnStart
	DGridGap
	DGridRow
	DGridRowEnd
	DGridRowGap
	DGridRowStart
	DGridTemplate
	DGridTemplateAreas
	DGridTemplateColumns
	DGridTemplateRows
	DHeight
	DHyphens
	DImageOrientation
	DImageRendering
	DInitialLetter
	DInlineSize
	DInset
	DJustifyContent
	DJustifyItems
	DJustifySelf
	DLeft
	DLetterSpacing
	DLightingColor
	DLineBreak
	DLineHeight
	DListStyle
	DListStyleImage
	DListStylePosition
	DListStyleType
	DMargin
	DMarginBlockEnd
	DMarginBlockStart
	DMarginBottom
	DMarginInlineEnd
	DMarginInlineStart
	DMarginLeft
	DMarginRight
	DMarginTop
	DMarker
	DMarkerEnd
	DMarkerMid
	DMarkerStart
	DMask
	DMaskComposite
	DMaskImage
	DMaskOrigin
	DMaskPosition
	DMaskRepeat
	DMaskSize
	DMaskType
	DMaxBlockSize
	DMaxHeight
	DMaxInlineSize
	DMaxWidth
	DMinBlockSize
	DMinHeight
	DMinInlineSize
	DMinWidth
	DObjectFit
	DObjectPosition
	DOpacity
	DOrder
	DOrphans
	DOutline
	DOutlineColor
	DOutlineOffset
	DOutlineStyle
	DOutlineWidth
	DOverflow
	DOverflowAnchor
	DOverflowWrap
	DOverflowX
	DOverflowY
	DOverscrollBehavior
	DOverscrollBehaviorBlock
	DOverscrollBehaviorInline
	DOverscrollBehaviorX
	DOverscrollBehaviorY
	DPadding
	DPaddingBlockEnd
	DPaddingBlockStart
	DPaddingBottom
	DPaddingInlineEnd
	DPaddingInlineStart
	DPaddingLeft
	DPaddingRight
	DPaddingTop
	DPageBreakAfter
	DPageBreakBefore
	DPageBreakInside
	DPaintOrder
	DPerspective
	DPerspectiveOrigin
	DPlaceContent
	DPlaceItems
	DPlaceSelf
	DPointerEvents
	DPosition
	DPrintColorAdjust
	DQuotes
	DResize
	DRight
	DRotate
	DRowGap
	DRubyAlign
	DRubyPosition
	DScale
	DScrollBehavior
	DShapeRendering
	DStopColor
	DStopOpacity
	DStroke
	DStrokeDasharray
	DStrokeDashoffset
	DStrokeLinecap
	DStrokeLinejoin
	DStrokeMiterlimit
	DStrokeOpacity
	DStrokeWidth
	DTabSize
	DTableLayout
	DTextAlign
	DTextAlignLast
	DTextAnchor
	DTextCombineUpright
	DTextDecoration
	DTextDecorationColor
	DTextDecorationLine
	DTextDecorationSkip
	DTextDecorationStyle
	DTextEmphasis
	DTextEmphasisColor
	DTextEmphasisPosition
	DTextEmphasisStyle
	DTextIndent
	DTextJustify
	DTextOrientation
	DTextOverflow
	DTextRendering
	DTextShadow
	DTextSizeAdjust
	DTextTransform
	DTextUnderlinePosition
	DTop
	DTouchAction
	DTransform
	DTransformBox
	DTransformOrigin
	DTransformStyle
	DTransition
	DTransitionDelay
	DTransitionDuration
	DTransitionProperty
	DTransitionTimingFunction
	DTranslate
	DUnicodeBidi
	DUserSelect
	DVerticalAlign
	DVisibility
	DWhiteSpace
	DWidows
	DWidth
	DWillChange
	DWordBreak
	DWordSpacing
	DWordWrap
	DWritingMode
	DZIndex
	DZoom
)

type ImportConditions added in v0.18.20

type ImportConditions struct {
	// The syntax for "@import" has been extended with optional conditions that
	// behave as if the imported file was wrapped in a "@layer", "@supports",
	// and/or "@media" rule. The possible syntax combinations are as follows:
	//
	//   @import url(...);
	//   @import url(...) layer;
	//   @import url(...) layer(layer-name);
	//   @import url(...) layer(layer-name) supports(supports-condition);
	//   @import url(...) layer(layer-name) supports(supports-condition) list-of-media-queries;
	//   @import url(...) layer(layer-name) list-of-media-queries;
	//   @import url(...) supports(supports-condition);
	//   @import url(...) supports(supports-condition) list-of-media-queries;
	//   @import url(...) list-of-media-queries;
	//
	// From: https://developer.mozilla.org/en-US/docs/Web/CSS/@import#syntax
	Media []Token

	// These two fields will only ever have zero or one tokens. However, they are
	// implemented as arrays for convenience because most of esbuild's helper
	// functions that operate on tokens take arrays instead of individual tokens.
	Layers   []Token
	Supports []Token
}

func (*ImportConditions) CloneWithImportRecords added in v0.18.20

func (c *ImportConditions) CloneWithImportRecords(importRecordsIn []ast.ImportRecord, importRecordsOut []ast.ImportRecord) (ImportConditions, []ast.ImportRecord)

type ImportedComposesName added in v0.18.19

type ImportedComposesName struct {
	Alias             string
	AliasLoc          logger.Loc
	ImportRecordIndex uint32
}

type KeyframeBlock added in v0.7.8

type KeyframeBlock struct {
	Selectors     []string
	Rules         []Rule
	Loc           logger.Loc
	CloseBraceLoc logger.Loc
}

type NameToken added in v0.7.20

type NameToken struct {
	Text  string
	Range logger.Range
	Kind  css_lexer.T
}

func (NameToken) Equal added in v0.18.14

func (a NameToken) Equal(b NameToken) bool

type NamespacedName

type NamespacedName struct {
	// If present, this is an identifier or "*" and is followed by a "|" character
	NamespacePrefix *NameToken

	// This is an identifier or "*"
	Name NameToken
}

func (NamespacedName) Clone added in v0.18.14

func (n NamespacedName) Clone() NamespacedName

func (NamespacedName) Equal added in v0.11.19

func (a NamespacedName) Equal(b NamespacedName) bool

func (NamespacedName) Range added in v0.18.19

func (n NamespacedName) Range() logger.Range

type NthIndex added in v0.18.17

type NthIndex struct {
	A string
	B string // May be "even" or "odd"
}

This is the "An+B" syntax

func (*NthIndex) Minify added in v0.18.17

func (index *NthIndex) Minify()

type PercentageFlags added in v0.19.9

type PercentageFlags uint8
const (
	AllowPercentageBelow0 PercentageFlags = 1 << iota
	AllowPercentageAbove100
	AllowAnyPercentage = AllowPercentageBelow0 | AllowPercentageAbove100
)

type PseudoClassKind added in v0.18.14

type PseudoClassKind uint8
const (
	PseudoClassGlobal PseudoClassKind = iota
	PseudoClassHas
	PseudoClassIs
	PseudoClassLocal
	PseudoClassNot
	PseudoClassNthChild
	PseudoClassNthLastChild
	PseudoClassNthLastOfType
	PseudoClassNthOfType
	PseudoClassWhere
)

func (PseudoClassKind) HasNthIndex added in v0.18.17

func (kind PseudoClassKind) HasNthIndex() bool

func (PseudoClassKind) String added in v0.18.14

func (kind PseudoClassKind) String() string

type R

type R interface {
	Equal(rule R, check *CrossFileEqualityCheck) bool
	Hash() (uint32, bool)
}

type RAtCharset added in v0.7.7

type RAtCharset struct {
	Encoding string
}

func (*RAtCharset) Equal added in v0.11.19

func (a *RAtCharset) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RAtCharset) Hash added in v0.11.19

func (r *RAtCharset) Hash() (uint32, bool)

type RAtImport

type RAtImport struct {
	ImportConditions  *ImportConditions
	ImportRecordIndex uint32
}

func (*RAtImport) Equal added in v0.11.19

func (*RAtImport) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RAtImport) Hash added in v0.11.19

func (r *RAtImport) Hash() (uint32, bool)

type RAtKeyframes added in v0.7.8

type RAtKeyframes struct {
	AtToken       string
	Name          ast.LocRef
	Blocks        []KeyframeBlock
	CloseBraceLoc logger.Loc
}

func (*RAtKeyframes) Equal added in v0.11.19

func (a *RAtKeyframes) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RAtKeyframes) Hash added in v0.11.19

func (r *RAtKeyframes) Hash() (uint32, bool)

type RAtLayer added in v0.14.23

type RAtLayer struct {
	Names         [][]string
	Rules         []Rule
	CloseBraceLoc logger.Loc
}

func (*RAtLayer) Equal added in v0.14.23

func (a *RAtLayer) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RAtLayer) Hash added in v0.14.23

func (r *RAtLayer) Hash() (uint32, bool)

type RBadDeclaration

type RBadDeclaration struct {
	Tokens []Token
}

func (*RBadDeclaration) Equal added in v0.11.19

func (a *RBadDeclaration) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RBadDeclaration) Hash added in v0.11.19

func (r *RBadDeclaration) Hash() (uint32, bool)

type RComment added in v0.13.10

type RComment struct {
	Text string
}

func (*RComment) Equal added in v0.13.10

func (a *RComment) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RComment) Hash added in v0.13.10

func (r *RComment) Hash() (uint32, bool)

type RDeclaration

type RDeclaration struct {
	KeyText   string
	Value     []Token
	KeyRange  logger.Range
	Key       D // Compare using this instead of "Key" for speed
	Important bool
}

func (*RDeclaration) Equal added in v0.11.19

func (a *RDeclaration) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RDeclaration) Hash added in v0.11.19

func (r *RDeclaration) Hash() (uint32, bool)

type RKnownAt

type RKnownAt struct {
	AtToken       string
	Prelude       []Token
	Rules         []Rule
	CloseBraceLoc logger.Loc
}

func (*RKnownAt) Equal added in v0.11.19

func (a *RKnownAt) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RKnownAt) Hash added in v0.11.19

func (r *RKnownAt) Hash() (uint32, bool)

type RQualified

type RQualified struct {
	Prelude       []Token
	Rules         []Rule
	CloseBraceLoc logger.Loc
}

func (*RQualified) Equal added in v0.11.19

func (a *RQualified) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RQualified) Hash added in v0.11.19

func (r *RQualified) Hash() (uint32, bool)

type RSelector

type RSelector struct {
	Selectors     []ComplexSelector
	Rules         []Rule
	CloseBraceLoc logger.Loc
}

func (*RSelector) Equal added in v0.11.19

func (a *RSelector) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RSelector) Hash added in v0.11.19

func (r *RSelector) Hash() (uint32, bool)

type RUnknownAt

type RUnknownAt struct {
	AtToken string
	Prelude []Token
	Block   []Token
}

func (*RUnknownAt) Equal added in v0.11.19

func (a *RUnknownAt) Equal(rule R, check *CrossFileEqualityCheck) bool

func (*RUnknownAt) Hash added in v0.11.19

func (r *RUnknownAt) Hash() (uint32, bool)

type Rule added in v0.12.20

type Rule struct {
	Data R
	Loc  logger.Loc
}

type SS

type SS interface {
	Equal(ss SS, check *CrossFileEqualityCheck) bool
	Hash() uint32
	Clone() SS
}

type SSAttribute

type SSAttribute struct {
	MatcherOp       string // Either "" or one of: "=" "~=" "|=" "^=" "$=" "*="
	MatcherValue    string
	NamespacedName  NamespacedName
	MatcherModifier byte // Either 0 or one of: 'i' 'I' 's' 'S'
}

func (*SSAttribute) Clone added in v0.18.14

func (ss *SSAttribute) Clone() SS

func (*SSAttribute) Equal added in v0.11.19

func (a *SSAttribute) Equal(ss SS, check *CrossFileEqualityCheck) bool

func (*SSAttribute) Hash added in v0.11.19

func (ss *SSAttribute) Hash() uint32

type SSClass

type SSClass struct {
	Name ast.LocRef
}

func (*SSClass) Clone added in v0.18.14

func (ss *SSClass) Clone() SS

func (*SSClass) Equal added in v0.11.19

func (a *SSClass) Equal(ss SS, check *CrossFileEqualityCheck) bool

func (*SSClass) Hash added in v0.11.19

func (ss *SSClass) Hash() uint32

type SSHash

type SSHash struct {
	Name ast.LocRef
}

func (*SSHash) Clone added in v0.18.14

func (ss *SSHash) Clone() SS

func (*SSHash) Equal added in v0.11.19

func (a *SSHash) Equal(ss SS, check *CrossFileEqualityCheck) bool

func (*SSHash) Hash added in v0.11.19

func (ss *SSHash) Hash() uint32

type SSPseudoClass

type SSPseudoClass struct {
	Name      string
	Args      []Token
	IsElement bool // If true, this is prefixed by "::" instead of ":"
}

func (*SSPseudoClass) Clone added in v0.18.14

func (ss *SSPseudoClass) Clone() SS

func (*SSPseudoClass) Equal added in v0.11.19

func (a *SSPseudoClass) Equal(ss SS, check *CrossFileEqualityCheck) bool

func (*SSPseudoClass) Hash added in v0.11.19

func (ss *SSPseudoClass) Hash() uint32

type SSPseudoClassWithSelectorList added in v0.18.14

type SSPseudoClassWithSelectorList struct {
	Selectors []ComplexSelector
	Index     NthIndex
	Kind      PseudoClassKind
}

See https://drafts.csswg.org/selectors/#grouping

func (*SSPseudoClassWithSelectorList) Clone added in v0.18.14

func (ss *SSPseudoClassWithSelectorList) Clone() SS

func (*SSPseudoClassWithSelectorList) Equal added in v0.18.14

func (*SSPseudoClassWithSelectorList) Hash added in v0.18.14

type SubclassSelector added in v0.18.14

type SubclassSelector struct {
	Data  SS
	Range logger.Range
}

type Token added in v0.7.8

type Token struct {
	// Contains the child tokens for component values that are simple blocks.
	// These are either "(", "{", "[", or function tokens. The closing token is
	// implicit and is not stored.
	Children *[]Token // 8 bytes

	// This is the raw contents of the token most of the time. However, it
	// contains the decoded string contents for "TString" tokens.
	Text string // 16 bytes

	// The source location at the start of the token
	Loc logger.Loc // 4 bytes

	// URL tokens have an associated import record at the top-level of the AST.
	// This index points to that import record.
	//
	// Symbol tokens have an associated symbol. This index is the "InnerIndex"
	// of the "Ref" for this symbol. The "SourceIndex" for the "Ref" is just
	// the source index of the file for this AST.
	PayloadIndex uint32 // 4 bytes

	// The division between the number and the unit for "TDimension" tokens.
	UnitOffset uint16 // 2 bytes

	// This will never be "TWhitespace" because whitespace isn't stored as a
	// token directly. Instead it is stored in "HasWhitespaceAfter" on the
	// previous token. This is to make it easier to pattern-match against
	// tokens when handling CSS rules, since whitespace almost always doesn't
	// matter. That way you can pattern match against e.g. "rgb(r, g, b)" and
	// not have to handle all possible combinations of embedded whitespace
	// tokens.
	//
	// There is one exception to this: when in verbatim whitespace mode and
	// the token list is non-empty and is only whitespace tokens. In that case
	// a single whitespace token is emitted. This is because otherwise there
	// would be no tokens to attach the whitespace before/after flags to.
	Kind css_lexer.T // 1 byte

	// These flags indicate the presence of a "TWhitespace" token before or after
	// this token. There should be whitespace printed between two tokens if either
	// token indicates that there should be whitespace. Note that whitespace may
	// be altered by processing in certain situations (e.g. minification).
	Whitespace WhitespaceFlags // 1 byte
}

We create a lot of tokens, so make sure this layout is memory-efficient. The layout here isn't optimal because it biases for convenience (e.g. "string" could be shorter) but at least the ordering of fields was deliberately chosen to minimize size.

func CloneTokensWithImportRecords added in v0.14.0

func CloneTokensWithImportRecords(
	tokensIn []Token, importRecordsIn []ast.ImportRecord,
	tokensOut []Token, importRecordsOut []ast.ImportRecord,
) ([]Token, []ast.ImportRecord)

func CloneTokensWithoutImportRecords added in v0.18.14

func CloneTokensWithoutImportRecords(tokensIn []Token) (tokensOut []Token)

func (Token) ClampedFractionForPercentage added in v0.19.9

func (t Token) ClampedFractionForPercentage() (float64, bool)

func (Token) DimensionUnit added in v0.7.9

func (t Token) DimensionUnit() string

func (Token) DimensionUnitIsSafeLength added in v0.13.15

func (t Token) DimensionUnitIsSafeLength() bool

func (Token) DimensionValue added in v0.7.9

func (t Token) DimensionValue() string

func (Token) Equal added in v0.11.19

func (a Token) Equal(b Token, check *CrossFileEqualityCheck) bool

func (Token) EqualIgnoringWhitespace added in v0.11.19

func (a Token) EqualIgnoringWhitespace(b Token) bool

func (Token) IsAngle added in v0.13.14

func (t Token) IsAngle() bool

func (Token) IsOne added in v0.12.10

func (t Token) IsOne() bool

func (Token) IsZero added in v0.12.10

func (t Token) IsZero() bool

func (Token) NumberOrFractionForPercentage added in v0.19.9

func (t Token) NumberOrFractionForPercentage(percentReferenceRange float64, flags PercentageFlags) (float64, bool)

func (Token) PercentageValue added in v0.11.19

func (t Token) PercentageValue() string

func (*Token) TurnLengthIntoNumberIfZero added in v0.11.19

func (t *Token) TurnLengthIntoNumberIfZero() bool

https://drafts.csswg.org/css-values-3/#lengths For zero lengths the unit identifier is optional (i.e. can be syntactically represented as the <number> 0).

func (*Token) TurnLengthOrPercentageIntoNumberIfZero added in v0.12.10

func (t *Token) TurnLengthOrPercentageIntoNumberIfZero() bool

type WhitespaceFlags added in v0.8.43

type WhitespaceFlags uint8
const (
	WhitespaceBefore WhitespaceFlags = 1 << iota
	WhitespaceAfter
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL