Comments (8)
This may needs an extra layer of work before build: importing dependencies.
Maybe related to this project: https://github.com/xhd2015/go-inspect
from xgo.
from xgo.
Kwonledge of packages.Load
:
import "golang.org/x/tools/go/packages"
func TestPackageLoad(t *testing.T) {
fset := token.NewFileSet()
cfg := &packages.Config{
Mode: packages.NeedImports,
Fset: fset,
}
pkgs, err := packages.Load(cfg, "./cmd/xgo")
if err != nil {
return err
}
t.Logf(pkgs)
}
mode | fields |
---|---|
NeedImports | add imports are resolved, but resolved package does not contain other info |
NeedFiles | the GoFiles and IgnoredFiles will be set |
from xgo.
Since go1.16, go build adds a -overlay
flag, that was primarily added to support editors loading unsaved files: golang/go#39958.
But we can utilize it to include extra files without modifying any project files.
from xgo.
For the vendoring case, can we just use this replace:
replace github.com/xhd2015/xgo/runtime => ./local_created_runtime
We can manually parse the vendor/modules.txt
, and recover the minimal go.mod
for each module.
See here: https://github.com/golang/go/blob/334ce510046ad30b1be466634cf313aad3040892/src/cmd/go/internal/modload/vendor.go#L40
from xgo.
We can manually parse the
vendor/modules.txt
, and recover the minimalgo.mod
for each module.
To make it work in vendor mode, the key point is to use an alternate -modfile
to allow go modify the go.mod
, bypassing the vendoring check.
Because when turning -mod=vendor
into -mod=mod -overlay overlay.json
, if go.mod
appears in overlay.json
, go complains:
go: updates to go.mod needed, but go.mod is part of the overlay specified with -overlay
The solution becomes:
-mod=mod -modfile go-tmp.mod
from xgo.
We are currently encounter a subtle bug while running tests:
- after
trap_without_dep
passed, future tests with stdlib, like func_list would fail- complaining about
net/http.Get
not trapped, - It's just that
net
,net/http
are missing, butos
,io
,io/ioutil
are still fine
- complaining about
- If run tests with
-a
, that problem goes away.
This may be related to build cache.
from xgo.
More edge scenarios need to be verified:
- what if the go.mod already contains
github.com/xhd2015/xgo/runtime
, directly or indirectly. - when multiple args were used, what if some imports the dependency, while others not?
This leads to a more sophisticated solution:
- check if go.mod contains the dependency directly or indirectly,
go list -m -json github.com/xhd2015/xgo/runtime
, orgo list -m -json -mod=vendor github.com/xhd2015/xgo/runtime
- for vendor mode, should also check if the pkg
github.com/xhd2015/xgo/runtime/pkg
is missing, if missing then the whole runtime should be imported and replacing the current runtime
The process is splitted into 2 phases:
from xgo.
Related Issues (20)
- Proposal: xgo tool coverage merge -o cov.out cov-a.out cov-b.out HOT 6
- Proposal: xgo tool test-explorer HOT 5
- rename the standalone tool name to `go-coverage-tool` later. HOT 1
- xgo failed to run tests on Windows HOT 14
- Bug: --strace with vendor mode, dep check always failed
- Allow more stdlib functions to be mocked HOT 4
- Trace: extend default shrink size from 4K(4096) to 16K(16384)
- Coverage: make incremental coverage work on windows
- Feature: extend external dependency auto importing
- Bug: common_string.go:66:6: __xgo_orig__ redeclared in this block
- Coverage: support coverage from URL
- CI: Run tests for kubernetes and pocketbase nightly
- Feature: add Debug button to test explorer HOT 1
- Enhancement: dynamically show subcases running status in test explorer
- Bug: linux: copy_file_range: is a directory HOT 1
- Doc: add individual doc for trace, coverage and test-explorer
- Bug: build pocketbase failed: github.com/pocketbase/pocketbase/models/schema internal compiler error: panic: interface conversion: interface {} is string, not syntax.writeError HOT 3
- Doc: add doc for xgo's github workflow and git hooks
- Mock: make --trap-stdlib the default when running `xgo test`
- Perf: Test-Explorer: Join all test files together to run all in once
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 xgo.