diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..565d313 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,64 @@ +name: CI + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +# The CACHE_VERSION can be updated to force the use of a new cache if +# the current cache contents become corrupted/invalid. This can +# sometimes happen when (for example) the OS version is changed but +# older .so files are cached, which can have various effects +# (e.g. cabal complains it can't find a valid version of the "happy" +# tool). +env: + CACHE_VERSION: 1 + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-22.04] + ghc: ["9.4.8", "9.6.6", "9.8.2"] + cabal: ["3.10.3.0"] + + steps: + - uses: actions/checkout@v4 + with: + submodules: true + + - uses: haskell-actions/setup@v2 + id: setup-haskell + with: + ghc-version: ${{ matrix.ghc }} + cabal-version: ${{ matrix.cabal }} + + - uses: actions/cache/restore@v4 + name: Restore cabal store cache + with: + path: | + ${{ steps.setup-haskell.outputs.cabal-store }} + dist-newstyle + key: ${{ env.CACHE_VERSION }}-cabal-${{ matrix.os }}-${{ matrix.ghc }}-${{ hashFiles(format('cabal.GHC-{0}.config', matrix.ghc)) }}-${{ github.sha }} + restore-keys: | + ${{ env.CACHE_VERSION }}-cabal-${{ matrix.os }}-${{ matrix.ghc }}-${{ hashFiles(format('cabal.GHC-{0}.config', matrix.ghc)) }}- + + - name: Update + run: cabal update + - name: Configure + run: cabal configure --enable-tests + - name: Build + run: cabal build + - name: Run tests + run: cabal test + + - uses: actions/cache/save@v4 + name: Save cabal store cache + if: always() + with: + path: | + ${{ steps.setup-haskell.outputs.cabal-store }} + dist-newstyle + key: ${{ env.CACHE_VERSION }}-cabal-${{ matrix.os }}-${{ matrix.ghc }}-${{ hashFiles(format('cabal.GHC-{0}.config', matrix.ghc)) }}-${{ github.sha }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 95caabf..0000000 --- a/.travis.yml +++ /dev/null @@ -1,36 +0,0 @@ -# Sudo used for custom apt setup -sudo: true - -# Add new environments to the build here: -env: - - GHCVER=8.0.2 CABALVER=3.0 - - GHCVER=8.2.2 CABALVER=3.0 - - GHCVER=8.4.4 CABALVER=3.0 - - GHCVER=8.6.5 CABALVER=3.0 - - GHCVER=8.8.1 CABALVER=3.0 - - GHCVER=head CABALVER=head - -# Allow for develop branch to break -matrix: - allow_failures: - - env: GHCVER=8.8.1 CABALVER=3.0 - - env: GHCVER=head CABALVER=head - -# Manually install ghc and cabal -before_install: - - travis_retry sudo add-apt-repository -y ppa:hvr/ghc - - travis_retry sudo apt-get update - - travis_retry sudo apt-get install cabal-install-$CABALVER ghc-$GHCVER - - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH - - export PATH=$HOME/.cabal/bin:$PATH - - travis_retry cabal update - -# Install Happy and Alex first, before installing -install: - - echo $PATH - - cabal --version - - ghc --version - - cabal configure --verbose --enable-tests - -script: - - cabal test diff --git a/src/Language/Rust/Data/Ident.hs b/src/Language/Rust/Data/Ident.hs index f68adac..512110a 100644 --- a/src/Language/Rust/Data/Ident.hs +++ b/src/Language/Rust/Data/Ident.hs @@ -33,13 +33,15 @@ data Ident = Ident { hash :: {-# UNPACK #-} !Int -- ^ hash for quick comparision , name :: Name -- ^ payload of the identifier , raw :: Bool -- ^ whether the identifier is raw - } deriving (Data, Typeable, Generic, NFData) - -instance Eq Ident where - x == y = (hash x, name x) == (hash y, name y) - -instance Ord Ident where - compare x y = compare (hash x, name x) (hash y, name y) + } + deriving ( Data, Typeable, Generic, NFData + -- | Note that this instance takes the 'raw' field into account, so + -- the identifiers @x@ and @r#x@ are judged /not/ to be equal. + , Eq + -- | Note that this instance takes the 'raw' field into account, so + -- the identifiers @x@ and @r#x@ are judged /not/ to be equal. + , Ord + ) -- | Shows the identifier as a string (for use with @-XOverloadedStrings@) instance Show Ident where