[PATCH] D58404: [clang-format] Add basic support for formatting C# files
MyDeveloperDay via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 19 13:33:36 PST 2019
MyDeveloperDay created this revision.
MyDeveloperDay added reviewers: djasper, klimek, krasimir, benhamilton, JonasToth.
MyDeveloperDay added a project: clang.
Herald added subscribers: jdoerfert, mgorny.
This revision adds basic support for formatting C# files with clang-format, I know the barrier to entry is high here so I'm sending this revision in to test the water as to whether this might be something we'd consider landing.
Justification:
C# code just looks ugly in comparison to the C++ code in our source tree which is clang-formatted.
I've struggled with Visual Studio reformatting to get a clean and consistent style, I want to format our C# code on saving like I do now for C++ and i want it to have the same style as defined in our .clang-format file, so it consistent as it can be with C++. (Braces/Breaking/Spaces/Indent etc..)
Using clang format without this patch leaves the code in a bad state, sometimes when the BreakStringLiterals is set, it fails to compile.
Mostly the C# is similar to Java, except instead of JavaAnnotations I try to reuse the TT_AttributeSquare.
Almost the most valuable portion is to have a new Language in order to partition the configuration for C# within a common .clang-format file, with the auto detection on the .cs extension. But there are other C# specific styles that could be added later if this is accepted. in particular how `{ set;get }` is formatted.
I'm including an example of its usage Before/After to demonstrate it initial capability.
C# code, formatted with current clang-format
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
namespace ConsoleApp1 {
class Program {
[MainAttribute] static void Main(string[] args) {}
public
void foo() {
float f = 1.0;
int a = (int)f;
string[] args = new string[1];
args[a] = "Hello";
}
public
string Foo {
set;
get;
}
}
[ClassAttribute] public class Bar {
public
Bar(){}
[MethodAttribute] public bool foo() {
return true;
}
[XmlElement(ElementName = "TaxRate")] public int taxRate;
[MethodAttribute] internal bool foo() {
string longstring =
"VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongLongLongLong";
return true;
}
}
internal class InternalBar {
public
InternalBar() {}
}
[TestClass][DeploymentItem("testData")] public class Test {
}
}
Same C# code, formatted with current clang-format with this revision (no .clang-format file, out-of-box formatting)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
namespace ConsoleApp1 {
class Program {
[MainAttribute]
static void
Main(string[] args) {}
public void foo() {
float f = 1.0;
int a = (int) f;
string[] args = new string[1];
args[a] = "Hello";
}
public string Foo {
set;
get;
}
}
[ClassAttribute]
public class Bar {
public Bar(){}
[MethodAttribute]
public bool foo() {
return true;
}
[XmlElement(ElementName = "TaxRate")]
public int taxRate;
[MethodAttribute]
internal bool
foo() {
string longstring =
"VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongLongLongLong";
return true;
}
}
internal class InternalBar {
public InternalBar() {}
}
[TestClass]
[DeploymentItem("testData")]
public class Test {}
}
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D58404
Files:
docs/ClangFormat.rst
docs/ClangFormatStyleOptions.rst
include/clang/Format/Format.h
lib/Format/ContinuationIndenter.cpp
lib/Format/Format.cpp
lib/Format/FormatToken.h
lib/Format/TokenAnnotator.cpp
lib/Format/UnwrappedLineFormatter.cpp
lib/Format/UnwrappedLineParser.cpp
tools/clang-format/ClangFormat.cpp
unittests/Format/CMakeLists.txt
unittests/Format/FormatTestCSharp.cpp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D58404.187433.patch
Type: text/x-patch
Size: 17237 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190219/70fea512/attachment-0001.bin>
More information about the cfe-commits
mailing list