Skip to content
Merged
6 changes: 3 additions & 3 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
Tokenize = "0796e94c-ce3b-5d07-9a54-7f471281c624"
REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
DocumentFormat = "ffa9a821-9c82-50df-894e-fbcef3ed31cd"
CSTParser = "00ebfdb7-1f24-5e51-bd34-a7502290713f"
JuliaFormatter = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
StaticLint = "b3cc710f-9c33-5bdb-a03d-a94903873e97"
JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
JSONRPC = "b9b8584e-8fd3-41f9-ad0c-7255d428e418"
CSTParser = "00ebfdb7-1f24-5e51-bd34-a7502290713f"
Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a"
SymbolServer = "cf896787-08d5-524d-9de7-132aaa0cb996"
URIParser = "30578b45-9adc-5946-b283-645ec420af67"
Expand All @@ -27,7 +27,7 @@ Sockets = "6462fe0b-24de-5631-8697-dd941f90decc"
JSON = "0.20, 0.21"
julia = "1"
CSTParser = "3.1"
DocumentFormat = "3.2.2"
JuliaFormatter = "0.6.3"
StaticLint = "8.0"
Tokenize = "0.5.10"
JSONRPC = "1.1"
Expand Down
3 changes: 2 additions & 1 deletion src/LanguageServer.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module LanguageServer
import URIParser
using JSON, REPL, CSTParser, DocumentFormat, SymbolServer, StaticLint
using JSON, REPL, CSTParser, JuliaFormatter, SymbolServer, StaticLint
using CSTParser: EXPR, Tokenize.Tokens, Tokenize.Tokens.kind, headof, parentof, valof
using StaticLint: refof, scopeof, bindingof
using UUIDs
Expand All @@ -15,6 +15,7 @@ include("uri2.jl")
include("protocol/protocol.jl")
include("extensions/extensions.jl")
include("document.jl")
include("formatoptions.jl")
include("languageserverinstance.jl")
include("multienv.jl")
include("runserver.jl")
Expand Down
16 changes: 16 additions & 0 deletions src/formatoptions.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const default_format_options = (4, 100)

struct FormatOptions <: JuliaFormatter.AbstractStyle
indent::Int
margin::Int
end
FormatOptions() = FormatOptions(default_format_options...)

FormatOptions(options::Vararg{Any,length(default_format_options)}) =
FormatOptions(something.(options, default_format_options)...)

JuliaFormatter.getstyle(x::FormatOptions) = x

# All functions that don't have a dispatch defined for FormatOptions
# fallback to the definition for JuliaFormatter.DefaultStyle. This is
# how we customize the behavior of the formatter.
4 changes: 2 additions & 2 deletions src/languageserverinstance.jl
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ mutable struct LanguageServerInstance
roots_env_map::Dict{Document,StaticLint.ExternalEnv}
symbol_store_ready::Bool

format_options::DocumentFormat.FormatOptions
format_options::FormatOptions
runlinter::Bool
lint_options::StaticLint.LintOptions
lint_missingrefs::Symbol
Expand Down Expand Up @@ -76,7 +76,7 @@ mutable struct LanguageServerInstance
StaticLint.ExternalEnv(deepcopy(SymbolServer.stdlibs), SymbolServer.collect_extended_methods(SymbolServer.stdlibs), collect(keys(SymbolServer.stdlibs))),
Dict(),
false,
DocumentFormat.FormatOptions(),
FormatOptions(),
true,
StaticLint.LintOptions(),
:all,
Expand Down
10 changes: 9 additions & 1 deletion src/requests/features.jl
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,15 @@ end

function textDocument_formatting_request(params::DocumentFormattingParams, server::LanguageServerInstance, conn)
doc = getdocument(server, URI2(params.textDocument.uri))
newcontent = DocumentFormat.format(get_text(doc), server.format_options)
newcontent = if server.runlinter
JuliaFormatter.format_text(get_text(doc);
indent=server.format_options.indent,
margin=server.format_options.margin,
style=server.format_options)
else
get_text(doc)
end

end_l, end_c = get_position_at(doc, sizeof(get_text(doc))) # AUDIT: OK
lsedits = TextEdit[TextEdit(Range(0, 0, end_l, end_c), newcontent)]

Expand Down
12 changes: 1 addition & 11 deletions src/requests/workspace.jl
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,7 @@ function request_julia_config(server::LanguageServerInstance, conn)

response = JSONRPC.send(conn, workspace_configuration_request_type, ConfigurationParams([
ConfigurationItem(missing, "julia.format.indent"), # FormatOptions
ConfigurationItem(missing, "julia.format.indents"),
ConfigurationItem(missing, "julia.format.ops"),
ConfigurationItem(missing, "julia.format.tuples"),
ConfigurationItem(missing, "julia.format.curly"),
ConfigurationItem(missing, "julia.format.calls"),
ConfigurationItem(missing, "julia.format.iterOps"),
ConfigurationItem(missing, "julia.format.comments"),
ConfigurationItem(missing, "julia.format.docs"),
ConfigurationItem(missing, "julia.format.lineends"),
ConfigurationItem(missing, "julia.format.keywords"),
ConfigurationItem(missing, "julia.format.kwarg"),
ConfigurationItem(missing, "julia.format.margin"),
ConfigurationItem(missing, "julia.lint.call"), # LintOptions
ConfigurationItem(missing, "julia.lint.iter"),
ConfigurationItem(missing, "julia.lint.nothingcomp"),
Expand Down