Skip to content

show :: SourceRange -> String is ambiguous #91

@lehmacdj

Description

@lehmacdj

For admittedly uncommon filenames & degenerate ranges there is ambiguity in the implementation of show :: SourceRange -> String. Consider the following two examples:

λ> import Text.Parsec.Pos
λ> show $ SourceRange [(newPos "asdf" 0 0, newPos "asdf" 0 0), (newPos "asdf" 0 0, newPos "" 0 0)]
"asdf@0:0-0:0;0:0-@0:0"
λ> show $ SourceRange [(newPos "asdf" 0 0, newPos "0:0;0:0-" 0 0)]
"asdf@0:0-0:0;0:0-@0:0"

I discovered this while writing a parser for such ranges. This is probably sufficiently degenerate that it doesn't necessarily need to be fixed, but it should be possible to escape the filename without complicating the implementation or impacting performance too much.

I would suggest simply enforcing that filenames containing : or - are printed escaped as show normally does. That is the second range here would instead be shown as the string: "asdf@0:0-\"0:0;0:0-\"@0:0". The first case would remain unchanged.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions