Comments (4)
It's a good thing you use the lib, so that these errors surface. Keep reporting!
from nimyaml.
There is no easy solution for this. After abc
, the parser starts reading the next line because it may be a multiline scalar. Upon encountering surname
at the uppermost indentation level, it determines that the scalar does not continue here and yields the token abc
. However, the lexer has already entered the next line and therefore, when the serialization queries the current line to report the error, it gets the line after abc
. By design, BaseLexer may have already dumped the previous line.
Two possibilities to solve this:
- Cache the starting line in the parser and preserve it until the token is finalized. This gravely cripples performance and is therefore not a viable solution.
- Remove the
lineContent
field from the exception because it does not work properly. Instead, provide a utility proc, that, provided with the exception and the whole YAML source as Stream, renders the line with marker. This may not be optimal because it does not cover all use-cases (e.g. if you process YAML directly from an non-resettable data stream), but is probably the cleanest solution.
from nimyaml.
This is now fixed as follows:
- if the parser is invoked with a
Stream
as source (like in the code given here),- if the lexer is still in the same line, it returns the line with marker.
- if the lexer has already advanced to the next line, it returns the empty string.
- If the parser is invoked with a
string
as source (new API), the line will always be correctly displayed.
Example:
import yaml
type Person = object
name, surname: string
age: int
var
s = """name: Andrea
age: abc
surname: Ferretti"""
c: Person
try:
load(s, c)
except YamlConstructionError:
let e = (ref YamlConstructionError)(getCurrentException())
echo "ERROR at line ", e.line, " column ", e.column
echo e.lineContent
echo e.msg
will display:
ERROR at line 2 column 6
age: abc
^
Cannot construct to int32: abc
from nimyaml.
Great, thank you very much!
from nimyaml.
Related Issues (20)
- defaultVal is not observed on stropped names HOT 2
- Anchor in ignored tag HOT 5
- Feature: Let user choose/disable maximum line length for presentation HOT 4
- BUG: loading zero to unsigned integer generates a YamlConstructionError
- BUG: loading to float32 generates an error HOT 3
- Can't get optional fields to work HOT 3
- ignore pragma doesn't work on nested maps HOT 1
- nimble install yaml fails on devel version of Nim (needs new release) HOT 1
- Crashes on incorrect YAML HOT 2
- Raise an unlisted exception HOT 13
- Parent fields cause failure when deserializing child object HOT 3
- Catchable exception warnings HOT 2
- Seemingly pointless proc HOT 6
- Implement Sane Defaults HOT 5
- Field name causes `Error: ambiguous identifier` for no relevant Reason HOT 2
- Dumping doesn't work at compile time
- Nim CI is broken HOT 1
- Dumping broken in way too many ways HOT 5
- Can not dump floats HOT 1
- Can't load a dumped OrderedTable if it has a long string key with brackets HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nimyaml.