mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
fixes #24269, refs #20095
Instead of checking the package of the *used sym* to determine whether a
stylecheck should trigger, we check the package of the lineinfo instead.
Before #20095 this checked for the current compilation context module
instead which caused issues with generic procs, but the lineinfo should
more closely match the AST.
I figured this might cause issues with includes etc but the foreign
package test specifically tests for an include and passes, so maybe the
package determining logic accounts for this already. This still might
not be the correct logic, I'm not too familiar with the package handling
in the compiler.
Package PRs, both merged:
- json_rpc: https://github.com/status-im/nim-json-rpc/pull/226
- json_serialization:
https://github.com/status-im/nim-json-serialization/pull/99
(cherry picked from commit aaf6c408c6)
62 lines
1.8 KiB
Nim
62 lines
1.8 KiB
Nim
#
|
|
#
|
|
# The Nim Compiler
|
|
# (c) Copyright 2022 Andreas Rumpf
|
|
#
|
|
# See the file "copying.txt", included in this
|
|
# distribution, for details about the copyright.
|
|
#
|
|
|
|
## Package related procs.
|
|
##
|
|
## See Also:
|
|
## * `packagehandling` for package path handling
|
|
## * `modulegraphs.getPackage`
|
|
## * `modulegraphs.belongsToStdlib`
|
|
|
|
import "." / [options, ast, lineinfos, idents, pathutils, msgs]
|
|
|
|
when defined(nimPreviewSlimSystem):
|
|
import std/assertions
|
|
|
|
|
|
proc getPackage*(conf: ConfigRef; cache: IdentCache; fileIdx: FileIndex): PSym =
|
|
## Return a new package symbol.
|
|
##
|
|
## See Also:
|
|
## * `modulegraphs.getPackage`
|
|
let
|
|
filename = AbsoluteFile toFullPath(conf, fileIdx)
|
|
name = getIdent(cache, splitFile(filename).name)
|
|
info = newLineInfo(fileIdx, 1, 1)
|
|
pkgName = getPackageName(conf, filename.string)
|
|
pkgIdent = getIdent(cache, pkgName)
|
|
newSym(skPackage, pkgIdent, idGeneratorForPackage(int32(fileIdx)), nil, info)
|
|
|
|
func getPackageSymbol*(sym: PSym): PSym =
|
|
## Return the owning package symbol.
|
|
assert sym != nil
|
|
result = sym
|
|
while result.kind != skPackage:
|
|
result = result.owner
|
|
assert result != nil, repr(sym.info)
|
|
|
|
func getPackageId*(sym: PSym): int =
|
|
## Return the owning package ID.
|
|
sym.getPackageSymbol.id
|
|
|
|
func belongsToProjectPackage*(conf: ConfigRef, sym: PSym): bool =
|
|
## Return whether the symbol belongs to the project's package.
|
|
##
|
|
## See Also:
|
|
## * `modulegraphs.belongsToStdlib`
|
|
conf.mainPackageId == sym.getPackageId
|
|
|
|
func belongsToProjectPackageMaybeNil*(conf: ConfigRef, sym: PSym): bool =
|
|
## Return whether the symbol belongs to the project's package.
|
|
## Returns `false` if `sym` is nil.
|
|
##
|
|
## See Also:
|
|
## * `modulegraphs.belongsToStdlib`
|
|
sym != nil and conf.mainPackageId == sym.getPackageId
|