Scope of a use clause in the package spec

I have a (with and) use clause in a package spec of requests.ads. There is only a with clause in the package body. I know that it is redundant but I like to see the dependencies of the body without opening the spec file. In a declare block in the body I added the use clause. GNAT them generates the warning:

requests.adb:33:17: warning: "Str20s" is already use-visible through previous use_clause at requests.ads:3 [-gnatwr]

Does a use clause from the spec extend to the body? That is not how I interpret the RM §8.4: “For a use_clause within a context_clause of a library_unit_declaration or …, the scope is the entire declarative region of the declaration.”

RM 8.1 definition of Declarative Ragion.
This is not a simple read.
The short answer:
Everything declared in the spec is directly visible in the body and in all child units and their child units and so on… (if not hidden by more local declarations).
Use clauses cannot be hidden, but there may be conflicts with other use clauses in which case you have to use the expanded name.

Seems logical. I knew that the with clause in a spec is also valid in the body. However, I was under the impression that this rule did not apply to the use clause and that I had to repeat a use clause in the body if I wanted to make something visible. Obviously I was wrong and learned something, thank you

There is some stylistic arguments on the use of use, with some arguing that [package-level] use shouldn’t be used because it imports whole namespaces, and others that it should.

In many cases, there is a happy medium in using them locally (eg in a declare-block or in a subprogram’s declarative region). My rule of thumb is to go with the ‘smallest scope’ in general, only ‘promoting’ up-scope when there are multiple uses in view. This means that if I have a lot of string manipulation in the implementation of multiple subprograms I’d put ‘use’ in the body… thus the only time to put use in the specification is when essentially the whole package (spec interface) is dependent on that, intrinsically. (You can tell it is when the prefix appears in your parameters very repeatedly; it’s in this case that the use makes these dissapear.)

Another thing to keep in mind is renames; it is ridiculously easy to say something like
Package Text renames Ada.Strings.Fixed; and then use that as your prefix. (eg Text.Index.)