ecluse:ecluse-core
Safe HaskellNone
LanguageGHC2021

Ecluse.Core.Version.Token

Description

The lexical atoms and the length bound the per-ecosystem version grammars share.

A VToken is a single numeric or textual run, ordered by the rule the RubyGems and PEP 440-local grammars have in common. The semver prerelease rule is the opposite, so it lives with the semver grammar. Everything here is purely lexical.

Synopsis

Documentation

data VToken Source #

A version token: a numeric or a textual run. Numeric tokens outrank textual ones, numerics compare numerically, and text compares lexically.

Constructors

VNum Integer 
VStr Text 

Instances

Instances details
NFData VToken Source # 
Instance details

Defined in Ecluse.Core.Version.Token

Methods

rnf :: VToken -> () #

Generic VToken Source # 
Instance details

Defined in Ecluse.Core.Version.Token

Associated Types

type Rep VToken 
Instance details

Defined in Ecluse.Core.Version.Token

type Rep VToken = D1 ('MetaData "VToken" "Ecluse.Core.Version.Token" "ecluse-0.4.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "VNum" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Integer)) :+: C1 ('MetaCons "VStr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Text)))

Methods

from :: VToken -> Rep VToken x #

to :: Rep VToken x -> VToken #

Show VToken Source # 
Instance details

Defined in Ecluse.Core.Version.Token

Eq VToken Source # 
Instance details

Defined in Ecluse.Core.Version.Token

Methods

(==) :: VToken -> VToken -> Bool #

(/=) :: VToken -> VToken -> Bool #

Ord VToken Source # 
Instance details

Defined in Ecluse.Core.Version.Token

type Rep VToken Source # 
Instance details

Defined in Ecluse.Core.Version.Token

type Rep VToken = D1 ('MetaData "VToken" "Ecluse.Core.Version.Token" "ecluse-0.4.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "VNum" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Integer)) :+: C1 ('MetaCons "VStr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Text)))

parseNumSeg :: Text -> Maybe Integer Source #

Parse a non-empty, all-digit segment as an integer.

numOr0 :: Text -> Integer Source #

Read an all-digit (already validated) run as an integer, defaulting to 0.

isAsciiAlphaNum :: Char -> Bool Source #

An ASCII letter or ASCII digit. The PEP 440 and Gem::Version grammars are ASCII-only, so the Unicode-aware isAlphaNum would over-accept and mis-order a non-ASCII digit.

digitRuns :: Text -> [Text] Source #

Split text into its maximal digit and non-digit runs.

classifyRun :: Text -> VToken Source #

Classify one run: all-digit reads as a VNum, anything else stays a VStr.

withinVersionLength :: Text -> Bool Source #

Whether a raw version string is short enough for the grammars to parse. Past the bound a version gets no ordering key and is served raw.