Skip to content

Commit a63c363

Browse files
Merge pull request #833 from am11/sourcemap-improvement
SourceMap: Independent of settings.
2 parents 060072e + db4d3cb commit a63c363

File tree

6 files changed

+48
-37
lines changed

6 files changed

+48
-37
lines changed

EditorExtensions/LESS/Compilers/LessCompiler.cs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.ComponentModel.Composition;
22
using System.Globalization;
33
using System.IO;
4-
using System.Text;
54
using System.Text.RegularExpressions;
65
using MadsKristensen.EditorExtensions.Settings;
76
using Microsoft.VisualStudio.Utilities;
@@ -23,17 +22,13 @@ public class LessCompiler : CssCompilerBase
2322

2423
protected override string GetArguments(string sourceFileName, string targetFileName)
2524
{
26-
var args = new StringBuilder("--no-color --relative-urls ");
25+
MapFileName = targetFileName + ".map";
26+
MapFileName = GenerateSourceMap ? MapFileName : Path.Combine(Path.GetTempPath(), Path.GetFileName(MapFileName));
2727

28-
if (WESettings.Instance.Less.GenerateSourceMaps)
29-
{
30-
args.AppendFormat(CultureInfo.CurrentCulture, "--source-map-basepath=\"{0}\" --source-map=\"{1}.map\" ",
31-
Path.GetDirectoryName(targetFileName), targetFileName);
32-
}
28+
string mapDirectory = Path.GetDirectoryName(MapFileName);
3329

34-
args.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\" \"{1}\"", sourceFileName, targetFileName);
35-
36-
return args.ToString();
30+
return string.Format(CultureInfo.CurrentCulture, "--no-color --relative-urls --source-map-basepath=\"{0}\" --source-map=\"{1}\" \"{2}\" \"{3}\"",
31+
mapDirectory, MapFileName, sourceFileName, targetFileName);
3732
}
3833
}
3934
}

EditorExtensions/SCSS/Compilers/ScssCompiler.cs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.ComponentModel.Composition;
22
using System.Globalization;
33
using System.IO;
4-
using System.Text;
54
using System.Text.RegularExpressions;
65
using MadsKristensen.EditorExtensions.Settings;
76
using Microsoft.VisualStudio.Utilities;
@@ -24,16 +23,10 @@ public class ScssCompiler : CssCompilerBase
2423

2524
protected override string GetArguments(string sourceFileName, string targetFileName)
2625
{
27-
var args = new StringBuilder();
26+
MapFileName = targetFileName + ".map";
27+
MapFileName = GenerateSourceMap ? MapFileName : Path.Combine(Path.GetTempPath(), Path.GetFileName(MapFileName));
2828

29-
if (GenerateSourceMap)
30-
{
31-
args.Append("--source-map ");
32-
}
33-
34-
args.AppendFormat(CultureInfo.CurrentCulture, "--output-style=expanded \"{0}\" --output \"{1}\"", sourceFileName, targetFileName);
35-
36-
return args.ToString();
29+
return string.Format(CultureInfo.CurrentCulture, "--source-map \"{0}\" --output-style=expanded \"{1}\" --output \"{2}\"", MapFileName, sourceFileName, targetFileName);
3730
}
3831

3932
//https://github.com/hcatlin/libsass/issues/242

EditorExtensions/Shared/Compilers/CssCompilerBase.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public abstract class CssCompilerBase : NodeExecutorBase
1616
{
1717
private static readonly Regex _sourceMapInCss = new Regex(@"\/\*#([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*\/", RegexOptions.Multiline);
1818

19-
2019
protected override string PostProcessResult(string resultSource, string sourceFileName, string targetFileName)
2120
{
2221
// Inserts an empty row between each rule and replace two space indentation with 4 space indentation

EditorExtensions/Shared/Compilers/NodeExecutorBase.cs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,17 @@ public abstract class NodeExecutorBase
1616
protected static readonly string WebEssentialsResourceDirectory = Path.Combine(Path.GetDirectoryName(typeof(NodeExecutorBase).Assembly.Location), @"Resources");
1717
private static readonly string NodePath = Path.Combine(WebEssentialsResourceDirectory, @"nodejs\node.exe");
1818

19-
public abstract string TargetExtension { get; }
20-
public abstract string ServiceName { get; }
19+
protected string MapFileName { get; set; }
20+
protected abstract string CompilerPath { get; }
21+
protected virtual Regex ErrorParsingPattern { get { return null; } }
22+
protected virtual Func<string, IEnumerable<CompilerError>> ParseErrors { get { return ParseErrorsWithRegex; } }
23+
2124
///<summary>Indicates whether this compiler will emit a source map file. Will only return true if aupported and enabled in user settings.</summary>
2225
public abstract bool GenerateSourceMap { get; }
23-
24-
protected abstract string CompilerPath { get; }
26+
public abstract string TargetExtension { get; }
27+
public abstract string ServiceName { get; }
2528
///<summary>Indicates whether this compiler is capable of compiling to a filename that doesn't match the source filename.</summary>
2629
public virtual bool RequireMatchingFileName { get { return false; } }
27-
protected virtual Regex ErrorParsingPattern { get { return null; } }
28-
protected virtual Func<string, IEnumerable<CompilerError>> ParseErrors { get { return ParseErrorsWithRegex; } }
2930

3031
public async Task<CompilerResult> CompileAsync(string sourceFileName, string targetFileName)
3132
{
@@ -53,16 +54,19 @@ public async Task<CompilerResult> CompileAsync(string sourceFileName, string tar
5354
{
5455
ProjectHelpers.CheckOutFileFromSourceControl(targetFileName);
5556

57+
MapFileName = MapFileName ?? targetFileName + ".map";
58+
5659
if (GenerateSourceMap)
57-
ProjectHelpers.CheckOutFileFromSourceControl(targetFileName + ".map");
60+
ProjectHelpers.CheckOutFileFromSourceControl(MapFileName);
5861

5962
using (var process = await start.ExecuteAsync())
6063
{
6164
return ProcessResult(
6265
process,
6366
File.ReadAllText(errorOutputFile).Trim(),
6467
sourceFileName,
65-
targetFileName
68+
targetFileName,
69+
MapFileName
6670
);
6771
}
6872
}
@@ -72,7 +76,7 @@ public async Task<CompilerResult> CompileAsync(string sourceFileName, string tar
7276
}
7377
}
7478

75-
private CompilerResult ProcessResult(Process process, string errorText, string sourceFileName, string targetFileName)
79+
private CompilerResult ProcessResult(Process process, string errorText, string sourceFileName, string targetFileName, string mapFileName)
7680
{
7781
var result = ValidateResult(process, targetFileName, errorText);
7882
var resultText = result.Result;
@@ -94,6 +98,7 @@ private CompilerResult ProcessResult(Process process, string errorText, string s
9498
var compilerResult = CompilerResultFactory.GenerateResult(
9599
sourceFileName: sourceFileName,
96100
targetFileName: targetFileName,
101+
mapFileName: mapFileName,
97102
isSuccess: success,
98103
result: resultText,
99104
errors: errors

EditorExtensions/Shared/Compilers/Result/CompilerResultFactory.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,19 @@ public static class CompilerResultFactory
88
{
99
public static CompilerResult GenerateResult(string sourceFileName, string targetFileName)
1010
{
11-
return GenerateResult(sourceFileName, targetFileName, true, null, null);
11+
return GenerateResult(sourceFileName, targetFileName, null, true, null, null);
1212
}
1313

1414
public static CompilerResult GenerateResult(string sourceFileName, string targetFileName, bool isSuccess, string result, IEnumerable<CompilerError> errors)
15+
{
16+
return GenerateResult(sourceFileName, targetFileName, null, isSuccess, result, errors);
17+
}
18+
19+
public static CompilerResult GenerateResult(string sourceFileName, string targetFileName, string mapFileName, bool isSuccess, string result, IEnumerable<CompilerError> errors)
1520
{
1621
CompilerResult instance;
1722

18-
var mapFileName = targetFileName + ".map";
23+
mapFileName = mapFileName ?? targetFileName + ".map";
1924

2025
if (result == null && File.Exists(targetFileName))
2126
result = File.ReadAllText(targetFileName);

EditorExtensions/Shared/Margins/CssTextViewMargin.cs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,27 @@ private void GoToDefinitionCommandHandler()
6060
if (selector == null)
6161
return;
6262

63-
int start = selector.Start;
64-
int column = start - containingLine.Start;
63+
int column = Math.Max(0, selector.SimpleSelectors.Last().Start - containingLine.Start - 1);
6564

66-
var sourceInfo = _compilerResult.SourceMap.MapNodes.FirstOrDefault(s => s.GeneratedLine == line && s.GeneratedColumn == column);
65+
var sourceInfoCollection = _compilerResult.SourceMap.MapNodes.Where(s => s.GeneratedLine == line && s.GeneratedColumn == column);
6766

68-
if (sourceInfo == null)
69-
return;
67+
if (!sourceInfoCollection.Any())
68+
{
69+
if (selector.SimpleSelectors.Last().PreviousSibling == null)
70+
return;
71+
72+
// In case previous selector had > or + sign at the end,
73+
// LESS compiler does count it as well.
74+
var point = selector.SimpleSelectors.Last().PreviousSibling.AfterEnd - 1;
75+
76+
column = Math.Max(0, point - containingLine.Start - 1);
77+
sourceInfoCollection = _compilerResult.SourceMap.MapNodes.Where(s => s.GeneratedLine == line && s.GeneratedColumn == column);
78+
79+
if (!sourceInfoCollection.Any())
80+
return;
81+
}
82+
83+
var sourceInfo = sourceInfoCollection.First();
7084

7185
if (sourceInfo.SourceFilePath != Document.FilePath)
7286
FileHelpers.OpenFileInPreviewTab(sourceInfo.SourceFilePath);

0 commit comments

Comments
 (0)