diff options
author | Bjørn Erik Pedersen <[email protected]> | 2022-05-12 10:09:15 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2022-05-14 13:40:55 +0200 |
commit | e8537e6dd0ae41427bd03d98477d4a6a1f71a2cc (patch) | |
tree | 38c99e5a8df596c63d228ca3937ef74868387e9a /resources/resource_transformers | |
parent | 2fbdee726809af7352353bb39a2aa31153b2214d (diff) | |
download | hugo-e8537e6dd0ae41427bd03d98477d4a6a1f71a2cc.tar.gz hugo-e8537e6dd0ae41427bd03d98477d4a6a1f71a2cc.zip |
postcss: Fix line numbers in error messages
Fixes #9880
Diffstat (limited to 'resources/resource_transformers')
-rw-r--r-- | resources/resource_transformers/postcss/integration_test.go | 92 | ||||
-rw-r--r-- | resources/resource_transformers/postcss/postcss.go | 18 |
2 files changed, 61 insertions, 49 deletions
diff --git a/resources/resource_transformers/postcss/integration_test.go b/resources/resource_transformers/postcss/integration_test.go index 5bb1a9ffe..c748f036b 100644 --- a/resources/resource_transformers/postcss/integration_test.go +++ b/resources/resource_transformers/postcss/integration_test.go @@ -22,19 +22,15 @@ import ( jww "github.com/spf13/jwalterweatherman" qt "github.com/frankban/quicktest" + "github.com/gohugoio/hugo/common/herrors" "github.com/gohugoio/hugo/htesting" "github.com/gohugoio/hugo/hugolib" ) -func TestTransformPostCSS(t *testing.T) { - if !htesting.IsCI() { - t.Skip("Skip long running test when running locally") - } - - c := qt.New(t) - - files := ` +const postCSSIntegrationTestFiles = ` -- assets/css/components/a.css -- +/* A comment. */ +/* Another comment. */ class-in-a { color: blue; } @@ -98,51 +94,57 @@ module.exports = { ` - c.Run("Success", func(c *qt.C) { - b := hugolib.NewIntegrationTestBuilder( - hugolib.IntegrationTestConfig{ - T: c, - NeedsOsFS: true, - NeedsNpmInstall: true, - LogLevel: jww.LevelInfo, - TxtarString: files, - }).Build() - - b.AssertLogContains("Hugo Environment: production") - b.AssertLogContains(filepath.FromSlash(fmt.Sprintf("PostCSS Config File: %s/postcss.config.js", b.Cfg.WorkingDir))) - b.AssertLogContains(filepath.FromSlash(fmt.Sprintf("package.json: %s/package.json", b.Cfg.WorkingDir))) - - b.AssertFileContent("public/index.html", ` +func TestTransformPostCSS(t *testing.T) { + if !htesting.IsCI() { + t.Skip("Skip long running test when running locally") + } + + c := qt.New(t) + + b := hugolib.NewIntegrationTestBuilder( + hugolib.IntegrationTestConfig{ + T: c, + NeedsOsFS: true, + NeedsNpmInstall: true, + LogLevel: jww.LevelInfo, + TxtarString: postCSSIntegrationTestFiles, + }).Build() + + b.AssertLogContains("Hugo Environment: production") + b.AssertLogContains(filepath.FromSlash(fmt.Sprintf("PostCSS Config File: %s/postcss.config.js", b.Cfg.WorkingDir))) + b.AssertLogContains(filepath.FromSlash(fmt.Sprintf("package.json: %s/package.json", b.Cfg.WorkingDir))) + + b.AssertFileContent("public/index.html", ` Styles RelPermalink: /css/styles.css Styles Content: Len: 770875| `) - }) - - c.Run("Error", func(c *qt.C) { - s, err := hugolib.NewIntegrationTestBuilder( - hugolib.IntegrationTestConfig{ - T: c, - NeedsOsFS: true, - NeedsNpmInstall: true, - TxtarString: strings.ReplaceAll(files, "color: blue;", "@apply foo;"), // Syntax error - }).BuildE() - s.AssertIsFileError(err) - }) + } -// bookmark2 -func TestIntegrationTestTemplate(t *testing.T) { - c := qt.New(t) +// 9880 +func TestTransformPostCSSError(t *testing.T) { + if !htesting.IsCI() { + t.Skip("Skip long running test when running locally") + } - files := `` + c := qt.New(t) - b := hugolib.NewIntegrationTestBuilder( + s, err := hugolib.NewIntegrationTestBuilder( hugolib.IntegrationTestConfig{ T: c, - NeedsOsFS: false, - NeedsNpmInstall: false, - TxtarString: files, - }).Build() + NeedsOsFS: true, + NeedsNpmInstall: true, + TxtarString: strings.ReplaceAll(postCSSIntegrationTestFiles, "color: blue;", "@apply foo;"), // Syntax error + }).BuildE() + + s.AssertIsFileError(err) + fe := herrors.UnwrapFileError(err) + pos := fe.Position() + c.Assert(strings.TrimPrefix(pos.Filename, s.H.WorkingDir), qt.Equals, filepath.FromSlash("/assets/css/components/a.css")) + c.Assert(pos.LineNumber, qt.Equals, 4) + errctx := fe.ErrorContext() + c.Assert(errctx, qt.IsNotNil) + c.Assert(errctx.Lines, qt.DeepEquals, []string{"/* Another comment. */", "class-in-a {", "\t@apply foo;", "}", ""}) + c.Assert(errctx.ChromaLexer, qt.Equals, "css") - b.Assert(true, qt.IsTrue) } diff --git a/resources/resource_transformers/postcss/postcss.go b/resources/resource_transformers/postcss/postcss.go index 733c958cf..dd7ad1418 100644 --- a/resources/resource_transformers/postcss/postcss.go +++ b/resources/resource_transformers/postcss/postcss.go @@ -28,6 +28,7 @@ import ( "github.com/gohugoio/hugo/common/collections" "github.com/gohugoio/hugo/common/hexec" + "github.com/gohugoio/hugo/hugofs" "github.com/gohugoio/hugo/common/hugo" @@ -39,8 +40,6 @@ import ( "errors" - "github.com/gohugoio/hugo/hugofs" - "github.com/mitchellh/mapstructure" "github.com/gohugoio/hugo/common/herrors" @@ -391,8 +390,19 @@ func (imp *importResolver) toFileError(output string) error { return inErr } - realFilename := fi.(hugofs.FileMetaInfo).Meta().Filename + meta := fi.(hugofs.FileMetaInfo).Meta() + realFilename := meta.Filename + f, err := meta.Open() + if err != nil { + return inErr + } + defer f.Close() + + ferr := herrors.NewFileError(realFilename, inErr) + pos := ferr.Position() + pos.LineNumber = file.Offset + 1 + return ferr.UpdatePosition(pos).UpdateContent(f, nil) - return herrors.NewFileErrorFromFile(inErr, file.Filename, realFilename, hugofs.Os, herrors.SimpleLineMatcher) + //return herrors.NewFileErrorFromFile(inErr, file.Filename, realFilename, hugofs.Os, herrors.SimpleLineMatcher) } |