Commit Graph

547 Commits

Author SHA1 Message Date
Chris Lattner
37f5452d15 require -> guard.
Swift SVN r28223
2015-05-06 22:53:38 +00:00
Ben Langmuir
e603126dc0 Factor out copying code completion results from one sink to another
We'll need to be able to do this in the client once we expose caching.

Swift SVN r28176
2015-05-05 19:02:17 +00:00
Ben Langmuir
c40100af66 Factor use of the CodeCompletion sys::Cache into get() and set() methods
Now get() and set() manage determining whether the results are stale,
and getResults() can just rely on that.

Also drive-by fix a data race where we were inserting our results sink
into the cache before it was finished being modified.

Swift SVN r28175
2015-05-05 19:02:16 +00:00
Ben Langmuir
563cd0acf0 Lift the code completion cache interface into the header
The only part that's hidden is the sys::Cache itself now.

Swift SVN r28174
2015-05-05 19:02:15 +00:00
Ben Langmuir
e39fb7224e Expose a libIDE function to lookup the completions for a module
We'll need this in order to move code completion result caching into the
client.

Swift SVN r28173
2015-05-05 19:02:13 +00:00
Dmitri Hrybenko
f386a58d0e CMake: fix dependencies for libSwiftIDE
Swift SVN r28086
2015-05-02 10:05:52 +00:00
Argyrios Kyrtzidis
a586753f0f [IDE] Implement generating the Swift interface for an C/ObjC header
This translates clang arguments to swift ones, uses the bridging header
functionality to parse the provided file, and re-uses part of the module interface
printing implementation to print an interface for the header.

Part of rdar://19939192

Swift SVN r28062
2015-05-02 01:17:45 +00:00
Chris Lattner
0011b3ae21 rename "unless" to "require" and give it an 'else' keyword.
Swift SVN r28059
2015-05-02 00:16:44 +00:00
Doug Gregor
103526b771 Remove code completion's dependencies on getProtocols().
Swift SVN r27976
2015-04-30 16:13:43 +00:00
Chris Lattner
c6aa041fb9 Add parser/ast/sema/sourcekit/etc support for 'unless' statement.
SILGen support still missing.



Swift SVN r27961
2015-04-30 05:55:11 +00:00
David Farler
09b486dbcd ObjC Header missing comment markers for some newline cases
Printing Doxygen isn't inside an XML tag, so we can't just print
code block content, which may have new lines without a doc comment
marker. Also, be more robust with indentation.

+ Tests.

rdar://problem/20703026

Swift SVN r27851
2015-04-28 01:32:54 +00:00
Ben Langmuir
fc53b6e355 [CodeCompletion] Expose some result creation APIs for SourceKit
We want to be able to synthesize new results inside SourceKit. At this
point, the simplest way to do that is to expose the constructors for
CodeCompletionResult and a create() function for CodeCompletionString.

The expectation that any strings are stored properly inside a
CodeCompletionResultSink is documented.

Swift SVN r27822
2015-04-27 22:27:48 +00:00
David Farler
0ee38ba4aa ASan build fix: overlapping memcpy and compiler flags in swift-ide-test
- Pass EnableObjCAttrRequiresFoundation to CompilerInvocation in
  swift-ide-test when printing comments.
- Use separate streams for printing HTML <h> tags

Swift SVN r27771
2015-04-26 20:02:00 +00:00
David Farler
ca5876a866 swiftMarkup Library
Replace ReST-flavored documentation comments with Markdown.

rdar://problem/20180412

In addition to full Markdown support, the following extensions are
supported. These appear as lists at the top level of the comment's
"document". All of these extensions are matched without regard to
case.

Parameter Outlines
------------------

- Parameters:
  - x: ...
  - y: ...

Separate Parameters
-------------------

- parameter x: ...
- parameter y: ...

- Note:
Parameter documentation may be broken up across the entire comment,
with a mix of parameter documentation kinds - they'll be consolidated
in the end.

Returns
-------

- returns: ...

The following extensions are also list items at the top level, which
will also appear in Xcode QuickHelp as first-class citizens:

- Attention: ...
- Author: ...
- Authors: ...
- Bug: ...
- Complexity: ...
- Copyright: ...
- Date: ...
- Experiment: ...
- Important: ...
- Invariant: ...
- Note: ...
- Postcondition: ...
- Precondition: ...
- Remark: ...
- Remarks: ...
- See: ...
- Since: ...
- Todo: ...
- Version: ...
- Warning: ...

These match most of the extra fields in Doxygen, plus a few more per request.

Other changes
-------------
- Remove use of rawHTML for all markup AST nodes except for those
not representable by the Xcode QuickHelp XSLT - <h>, <hr/>, and of
course inline/block HTML itself.

- Update the doc comment RNG schema to more accurately reflect Xcode
QuickHelp.

- Clean up cmark CMake configuration.

- Rename "FullComment" to "DocComment"

- Update the Swift Standard Documentation (in a follow-up commit)

- Update SourceKit for minor changes and link against cmark
  (in a follow-up commit).

Swift SVN r27727
2015-04-26 00:07:15 +00:00
Chris Willmore
c7c7388cf2 Change do-while to repeat-while.
Change all uses of "do { ... } while <cond>" to use "repeat" instead.
Rename DoWhileStmt to RepeatWhileStmt. Add diagnostic suggesting change
of 'do' to 'repeat' if a condition is found afterwards.

<rdar://problem/20336424> rename do/while loops to repeat/while & introduce "repeat <count> {}" loops

Swift SVN r27650
2015-04-23 22:48:31 +00:00
Doug Gregor
126e404fe5 Reimplement inference of type witnesses with a separate non-recursive pass.
Inference of type witnesses for associated types was previously
implemented as part of value witness matching in the constraint
solver. This led to a number of serious problems, including:
  - Recursion problems with the solver hunting for a type witness,
  which triggers more attemts to match value witnesses...
  - Arbitrarily crummy attempts to break the recursion causing
  type-check failures in fun places.
  - Ordering dependencies abound: different results depending on which
  value witnesses were satisfied first, failures because of the order
  in which we attempted to infer type witnesses, etc.

This new implementation of type witness inference uses a separate pass
that occurs whenever we're looking for any type witness, and solves
all of the type witnesses within a given conformance
simultaneously. We still look at potential value witnesses to infer
type witnesses, but we match them structurally, without invoking the
constraint solver.

There are a few caveats to this implementation:
  * We're not currently able to infer type witnesses from value
  witnesses that are global operators, so some tricks involving global
  operators (*cough* ~> *cough*) might require some manually-specified
  type witnesses. Note that the standard library doesn't include any
  such cases.

  * Yes, it's another kind of solver. At simple one, fortunately.

On the other hand, this implementation should be a big step forward:
  * It's far more predictable, order-invariant, and non-recursive.
  * The diagnostics for failures to infer type witnesses have
  improved.

Fixes rdar://problem/20598513.

Swift SVN r27616
2015-04-23 00:20:05 +00:00
Argyrios Kyrtzidis
b9ad28550e [IDE] When getting documentation comments XML, don't forget to escape the decl name as well.
rdar://20646650

Swift SVN r27580
2015-04-22 17:02:33 +00:00
Argyrios Kyrtzidis
df04a93814 [IDE] Report the editor placeholders in the syntax model.
rdar://20572261

Swift SVN r27392
2015-04-17 01:01:25 +00:00
Argyrios Kyrtzidis
5f6d091efc [AST] Keep track of the type decl that the type witness came from, for protocol conformances.
Swift SVN r27352
2015-04-16 06:23:54 +00:00
Argyrios Kyrtzidis
92ec232e0c [AST] Rename ValueDecl::getConformances() -> getSatisfiedProtocolRequirements(), NFC.
Swift SVN r27321
2015-04-15 17:19:19 +00:00
Ben Langmuir
f778836934 Add initializers to postfix-expr code completions
Previously, the only way to get initializers was completing after the
name of the type:
    Foo#^complete_here^#
    Foo(#^or_here^#

And now it will also work in unadorned expressions:
    #^a_top_level_completion^#
    bar(a, #^walked_into_a_bar^#

Unfortunately, not all our clients handle this well yet, so it's
protected by a language option.
    -code-complete-inits-in-postfix-expr

Swift SVN r27275
2015-04-14 14:54:08 +00:00
Argyrios Kyrtzidis
7c5f1e8c1d [IDE] Make sure we don't leave structure nodes without pop'ing them.
rdar://20457518

Swift SVN r27119
2015-04-08 05:03:08 +00:00
Ben Langmuir
70a93e0bfe Add code completion overload for defaulted arguments
When a call (func, method, initializer) has default arguments, produce
both the *with* and *without* default argument versions as if they were
overloaded.

rdar://problem/18573874

Swift SVN r27118
2015-04-08 02:41:20 +00:00
Xi Ge
f13bffcba3 [SDKAnalyzer] Add file existence check.
Also, this commit commented out several module names that fail to load.

Swift SVN r27039
2015-04-06 20:58:07 +00:00
Devin Coughlin
8b5f6fec60 Rename '#os' to '#available'
The API review list found it confusing that if #os() and #if os() looked so similar, so
change the availability checking query to be spelled #available:

if #available(iOS >= 9.0, *) {
  ...
}

Swift SVN r26995
2015-04-04 23:33:13 +00:00
Jordan Rose
613b194025 [IDE] Honer @testable for top-level completions as well.
This is the last planned Swift-side fix for testability in this release!

rdar://problem/17732115

Swift SVN r26949
2015-04-03 20:20:17 +00:00
Chris Lattner
79ed57f9f2 standardize naming of tuples and tuple patterns on "elements".
Previously some parts of the compiler referred to them as "fields",
and most referred to them as "elements".  Use the more generic 'elements'
nomenclature because that's what we refer to other things in the compiler
(e.g. the elements of a bracestmt).

At the same time, make the API better by providing "getElement" consistently
and using it, instead of getElements()[i].

NFC.



Swift SVN r26894
2015-04-02 20:23:49 +00:00
Argyrios Kyrtzidis
fc1c526f27 [IDE] Fix attempt to break the string.
Swift SVN r26884
2015-04-02 19:43:51 +00:00
Doug Gregor
38cc1fe5c6 Remove LazyResolver arguments from API entry points to the conformance lookup table.
Swift SVN r26838
2015-04-02 00:06:01 +00:00
Ben Langmuir
ea6e1f24a7 Avoid unnecessary calls to CodeCompletionString::getName during sorting
This improves run time of this particular function by up to 8x in my
testing. For *really* large sets of code completions (I tested top-level
completion with Cocoa imported) this gives a 30-40% improvement across
the request, not including time spent in the client.  The tradeoff is a
slight increase in peak memory usage (I saw 0.7% or 1.2 MB for the
top-level Cocoa case).

<rdar://problem/20355626>

Swift SVN r26748
2015-03-31 03:27:06 +00:00
Xi Ge
cdf2e853ad [CodeCompletion] Use a better API to retrieve
all the protocols a type conform to.

Swift SVN r26694
2015-03-29 07:08:57 +00:00
Xi Ge
90cf8aec22 [CodeCompletion] Add types whose extensions
conform _ErrorType protocol to the completions of throw statement.

Swift SVN r26691
2015-03-29 05:56:06 +00:00
Xi Ge
fb2c8aa103 [SDKAnalyzer] The initial commit of swift sdk digester.
This tool takes the input of two versions of the same sdk and outputs
their diff to facilicate the auto-migration of sdk clients.
In this initial commit, we take the path of one sdk and generate
a tree describing its API content. Next, we will diff trees generated
from different versions of the sdk.

In addition, this commit also refactored out part of swift-sdk-analyzer
to the common utils shared with swift-sdk-digester.

Swift SVN r26656
2015-03-28 00:05:28 +00:00
Jordan Rose
85a3751f6d Remove SourceFile::getImports in favor of FileUnit::getImportedModules.
getImportedModules is the canonical way to get imports, whether private,
public, or both. This is especially true now that we have more flags
for SourceFile imports that really shouldn't be consumed by anyone
outside of SourceFile.

In this same vein, provide addImports instead of setImports, since imports
are always additive.

No visible functionality change.

Swift SVN r26634
2015-03-27 16:36:47 +00:00
Jordan Rose
e334eed7a4 Record @testable in a SourceFile's import list.
No functionality change, since nothing's using it yet.

Swift SVN r26632
2015-03-27 16:36:44 +00:00
Xi Ge
18438647ef [CodeCompletion] Showing the member functions of Optional.
Previously, when code completing Optional<T>., we only show
the member functions of T; This fix adds the member functions
of Optional to the code completion list.
rdar://20316534

Swift SVN r26622
2015-03-27 02:53:09 +00:00
Xi Ge
256e038edf [CodeCompletion] Add exception handle clauses to catch stmt completion.
Swift SVN r26597
2015-03-26 18:32:13 +00:00
Xi Ge
0d9fb1aaa5 [CodeCompletion] Make sure only instantiable types are included
in code completion options when completing a throw statement.

Swift SVN r26571
2015-03-26 00:58:19 +00:00
Xi Ge
6f43e545fb [CodeCompletion] Auto-completing the throw statement.
When the code completion token appears after throw keyword,
a set of visible decls and instances conforming _ErrorType are
recommended as completion.

Swift SVN r26565
2015-03-25 23:46:26 +00:00
Xi Ge
8a64deb828 [codecompletion] auto-completing the catch statement.
When the code completion token is seen after the catch keyword, a set of
visible error types are suggested as completion.

Swift SVN r26519
2015-03-25 04:16:57 +00:00
Jordan Rose
f74bc7122c Split getAccessibility() into getFormalAccess() and getEffectiveAccess().
Currently a no-op, but effective access for entities within the current
module will soon need to take testability into account. This declaration:

  internal func foo() {}

has a formal access of 'internal', but an effective access of 'public' if
we're in a testable mode.

Part of rdar://problem/17732115 (testability)

Swift SVN r26472
2015-03-24 02:16:58 +00:00
Xi Ge
3c6419161e [CodeCompletion] Excape keywords.
When auto-completing a argument whose name is a reserved keyword, we escape
it by surrounding backticks.
rdar://18189510

Swift SVN r26464
2015-03-24 00:42:23 +00:00
John McCall
a0a16d78d2 Implement the do/catch statement. Tests to follow.
This patch also introduces some SILGen infrastructure for
dividing the function into "ordinary" and "postmatter"
sections, with error-handling-like stuff going into the
final section.  Currently, this is largely undermined by
SILBuilder, but I'm going to fix that in a follow-up.

Swift SVN r26422
2015-03-23 02:08:26 +00:00
Ben Langmuir
fff41e472e Hide _UnderscoredProtocols in code completion
We explicitly whitelist these "stdlib private" decls in interface
generation, because they may contain methods that users are required to
implement.  But in code-completion, there's no good reason to show them.
We still show completions for the methods themselves if you complete on
a public protocol that inherits from the private protocol. So,

<complete> => doesn't show _CollectionType

let a: CollectionType = ...
a.<complete> => *does* show startIndex, which comes from _CollectionType

rdar://problem/20086106

Swift SVN r26355
2015-03-20 17:14:08 +00:00
Doug Gregor
539c4b158e Use getAllConformances() in code completion rather than a manual wordlist.
Swift SVN r26324
2015-03-19 22:10:06 +00:00
Xi Ge
707071daa0 [CodeCompletion] Address Argyrios comments on r26134
Swift SVN r26271
2015-03-18 18:53:37 +00:00
Xi Ge
df187f7280 [CodeCompletion] Address Dmitri's comments on r26230
Swift SVN r26270
2015-03-18 18:53:34 +00:00
Xi Ge
b0b578dc6b [SyntaxColoring] Address Argyrios' comments on r26188
Swift SVN r26269
2015-03-18 18:53:33 +00:00
Ben Langmuir
5f2bcba8ba Update tests for code-completion modulename change
Add module name to OtherModule result output and update the tests
accordingly.

Swift SVN r26262
2015-03-18 16:40:28 +00:00
Ben Langmuir
ece29ccfa4 Add a module name field to code completion results
For decls, we get the most specific submodule from clang modules.  For
macros, we don't yet have a way to get this information, since the
mapping from module ID to submodule is burried in the ClangImporter.
Having submodule information for macros would also help reduce the space
cost of storing the module names, since we would hit the single-element
module name cache more often.

There is no special handling of imported headers, which currently come
through with their internal clang module name '__ObjC'.  Possibly these
should be treated as part of the current module.

A future commit will add the module name to swift-ide-test's output and update
the tests.

Swift SVN r26260
2015-03-18 16:14:11 +00:00