Incomplete message given by TVM-0.8 dev when executing parse_module

This reproducible failure is triggered by the code snippet below

import tvm.testing
import tvm.relay.testing
import pytest
import tvm.relay.transform
from tvm.tir.expr import *
from tvm.relay.dataflow_pattern import *
import tvm.topi.testing
import tvm.relay as relay


warning=pytest.raises(tvm.error.DiagnosticError)

SEMVER = '#[version = "0.0.5"]\n'

# BINARY_OPS = {'*': relay.multiply, '/': relay.divide, '+': relay.add, '-': relay.subtract, '<': relay.less, '>': relay.greater, '<=': relay.less_equal, '>=': relay.greater_equal, '==': relay.equal, '!=': relay.not_equal}

# TYPES = {'int8', 'int16', 'int32', 'int64', 'uint8', 'uint16', 'uint32', 'uint64', 'float16', 'float32', 'float64', 'bool', 'int8x4', 'uint1x4', 'float16x4'}

# LIST_DEFN = '\ntype List[A] {\n    Cons(A, List[A]),\n    Nil,\n}\n'


def assert_graph_equal(lhs, rhs):
    tvm.ir.assert_structural_equal(lhs, rhs, map_free_vars=True)


def graph_equal(lhs, rhs):
    return tvm.ir.structural_equal(lhs, rhs, map_free_vars=True)

def roundtrip_expr(expr):
    text = tvm.relay.Expr.astext(expr, show_meta_data=False)
    x = tvm.parser.parse_expr(text)
    assert_graph_equal(x, expr)

def roundtrip(expr):
    x = tvm.parser.fromtext(expr.astext())
    assert_graph_equal(x, expr)

def parse_text(code):
    expr = tvm.parser.parse_expr(code)
    roundtrip_expr(expr)
    return expr

def parses_as(code, expr):
    parsed = parse_text(code)
    result = graph_equal(parsed, expr)
    return result

def parse_module(code):
    mod = tvm.parser.parse((SEMVER + code))
    roundtrip(mod)
    return mod
    
with warning:
	parse_module(('''
            %s

            type List[A] {
            Cons(A, List[A]),
            Nil,
            }
            ''' % '''
type List[A] {
    Cons(A, List[A]),
    Nil,
}
'''))

Through differential testing, TVM-0.8 provided less detailed message than TVM-0.7.

Message given by TVM-0.7:

file:10:18: parse error: a type definition with the name `List` was previously defined
                type List[A] {
    ~~~~~~~~~~~~~~~~~^~~~~~~~~
file:11:13: parse error: a constructor with the name `Cons` was previously defined
                Cons(A, List[A]),
    ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~

Message given by TVM-0.8 dev:

error: a constructor with the name `Cons` was previously defined
 --> from_string:11:13
    |
 11 |              Cons(A, List[A]),
    |              ^^^^

Wouldn’t it be better to have TVM 0.8 display the same detailed message as TVM 0.7?

By the way, similar difference was met again. For the following code snippet:


import tvm.topi.testing
import tvm.relay.transform
import tvm.relay.testing
import tvm
import tvm.relay as relay
import pytest
import tvm.testing
from tvm.tir.expr import *
from tvm.relay.dataflow_pattern import *

warning=pytest.raises(tvm.error.DiagnosticError)

def assert_graph_equal(lhs, rhs):
    tvm.ir.assert_structural_equal(lhs, rhs, map_free_vars=True)

def graph_equal(lhs, rhs):
    return tvm.ir.structural_equal(lhs, rhs, map_free_vars=True)

def roundtrip_expr(expr):
    text = tvm.relay.Expr.astext(expr, show_meta_data=False)
    x = tvm.parser.parse_expr(text)
    assert_graph_equal(x, expr)

def roundtrip(expr):
    x = tvm.parser.fromtext(expr.astext())
    assert_graph_equal(x, expr)

def parse_text(code):
    expr = tvm.parser.parse_expr(code)
    roundtrip_expr(expr)
    return expr

with warning:
	res=parse_text('''meta[random_entry][15123]''')


TVM 0.7 outputs:

file:1:5: parse error: no entry in the meta table for `random_entry`
    meta[random_entry][15123]
    ~~~~^~~~~~~~~~~~~~~~~~~~~

TVM 0.8 outputs:

no entry in the meta table for `random_entry`

I believe it’s more friendly for TVM users to point out where goes wrong such as what TVM 0.7 does.